目录
(二)Java 中的 double 是如何存储的?(IEEE 754 简介)
小结:你眼中的“0.1”,计算机眼中可能是“0.10000000000000001”
(二)new BigDecimal(double) 的巨大坑
(四)scale 和 precision 的影响及副作用(通过实际乘法案例分析)
(一)String.format 为何得出奇怪的 3.4 和 3.3?
(三)DecimalFormat vs BigDecimal:谁才靠谱?
推荐格式化方式:BigDecimal + setScale + RoundingMode
五、判等陷阱:float/double/BigDecimal 的“==”误会
(一)为什么 amount1 - amount2 == 1.05 为 false?
(二)✅ 最佳实践 Checklist:金融系统浮点数安全用法
干货分享,感谢您的阅读!
“就加了个 0.1 + 0.2,怎么就不是 0.3 了?”
“同一个接口,线上调账 1 分,结果整整少了 300,000 元?”
听上去像是段子,但这类事故在金融系统、支付平台、清结算逻辑中并不罕见。
在程序世界里,0.1 + 0.2 != 0.3 并不是一个 bug,而是数学与计算机底层的差异冲突。浮点数的本质、Java 中 double 的局限、BigDecimal 的使用误区、格式化的陷阱、判等的误解……这一切都可能让你写下看似完美的代码,却埋下金额出错的隐雷。
这篇文章,将带你逐步揭开