处理浮点错误的最佳方法是什么?

问题描述 投票:0回答:2

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

确保数字正确且准确的最简单方法是什么?请注意,将 0.25+0.125 等添加到简单地四舍五入到小数点后 1 位并不能解决问题。

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

javascript floating-point numbers
2个回答
1
投票

没有简单的方法可以避免通用浮点运算中的舍入错误。数字

0.3
没有精确的二进制浮点表示。

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

要真正解决您的问题,您应该问自己几个问题:

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

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


0
投票

我用的是这个:


/// My value with floating point error
float fValue = 0.5000001;
fValue = (int)(fValue * 100) / 100;

您可以通过更改“100”值来调整浮动精度。

你总是可以把它放在一个很好的函数上:D


注意:我在 Unity Engine (C#) 中使用它。

© www.soinside.com 2019 - 2024. All rights reserved.