Java 浮点数精度陷阱与 BigDecimal 最佳实践
'就加了个 0.1 + 0.2,怎么就不是 0.3 了?' '同一个接口,线上调账 1 分,结果整整少了 300,000 元?'
听上去像是段子,但这类事故在金融系统、支付平台、清结算逻辑中并不罕见。
在程序世界里,0.1 + 0.2 != 0.3 并不是一个 bug,而是数学与计算机底层的差异冲突。浮点数的本质、Java 中 double 的局限、BigDecimal 的使用误区、格式化的陷阱、判等的误解……这一切都可能让你写下看似完美的代码,却埋下金额出错的隐雷。
这篇文章,将带你逐步揭开:
- 为什么看起来'理所当然'的小数运算,在计算机中会变得'不讲理'?
- Java 中到底该怎么写,才能让金额计算、比较、输出都安全可靠?


