关于javascript:处理浮点错误的最佳方法是什么?

What is the best way to deal with floating point errors?

所以我有一个Javascript脚本,它在一个循环中添加小分数,并且它可能会增加0.2到0.1。 然后该值被送到另一个函数,但问题是我需要0.3准确输入而不是0.30000000000000004。

什么是确保数字得到纠正和准确的最简单方法。 注意,可以将0.25 + 0.125等添加到简单舍入到1的十进制将无法解决问题。

也可以添加0.2 + 0.10000000000000004,尽管这非常非常不可能!


在通用浮点运算中,没有简单的方法可以避免舍入误差。数字0.3没有精确的二进制浮点表示。

我建议阅读每个计算机科学家应该知道的关于浮点运算的内容,以熟悉浮点表示数字所固有的权衡。

要真正解决您的问题,您应该问自己一些问题:

  • 您对精度的要求有多严格?为什么0.30000000000000004超出您的误差范围?将结果四舍五入是否可以接受?
  • 有没有什么方法可以代表你的数字并用整数执行大部分算术运算?例如。如果您知道您只会遇到有理数,则可以使用整数商和整数分母来表示它们。从那里,您可以尝试尽可能长时间地延迟转换以防止累积舍入错误。
  • 如果无法对整数执行计算,是否可以使用其他数据类型,例如BigDecimal

最终,当涉及浮点精度问题时,您通常需要根据特定问题的要求定制解决方案。