第60条:在需要精确答案时避免使用float和double

💡 原文约500字/词,阅读约需2分钟。
📝

内容提要

浮点数和双精度数不适合货币计算,因为无法精确表示十进制小数。可以用BigDecimal进行精确计算,或用int/long以分为单位计算。BigDecimal适合高精度但速度慢;int/long适合快速小范围计算。根据需求选择合适的数据类型。

🎯

关键要点

  • 浮点数和双精度数不适合货币计算,无法精确表示十进制小数。
  • 浮点数在计算中可能导致错误,例如1.03 - 0.42的结果为0.6100000000000001。
  • 在逐步计算中,浮点数也会产生误差,例如购买糖果时的计算错误。
  • 解决方案1:使用BigDecimal进行精确计算,避免使用double构造函数,使用String构造函数。
  • BigDecimal适合金融计算,但使用不便且速度较慢。
  • 解决方案2:使用int或long进行计算,以分为单位,避免精度问题。
  • 使用int和long进行计算时,速度快且精确。
  • 结论:不要使用float或double进行需要精确的计算,使用BigDecimal或int/long根据需求选择合适的数据类型。
➡️

继续阅读