避免浮点舍入不精确



在用浮点数进行除法时,我经常会得到不精确的结果(例如5.000000001等(。

在使用浮点数时,有没有一种方法可以在不出现浮点不精确问题的情况下进行除法?也许有更好的替代方案可以避免这种情况?

提前感谢您的回答!

你找不到这样的"不精确";,即使你可以,你也无法修复它们。例如,根本没有办法将0.1精确地表示为浮点值。这不是一个错误,这只是浮点数的工作方式(在任何语言中(,你只需要自己解决它。

以下是一些解决方法:

  • 只使用整数,因为它们不会出现舍入误差(只要它们不太大(。例如,如果你想处理小数点后只有两位数的财务金额,你应该以美分而不是欧元/美元/…存储金额。。。,以便只处理整数
  • 如果你想使用任意分数,你应该使用一个为此设计的库。这样的图书馆肯定有很多。或者你可以自己写,其中分数a/b表示为{numerator: a, denominator: b}(其中ab是整数,所以没有舍入误差(,然后你实现加法、乘法、等式。。。,在这个表示中,只处理整数
  • 如果你需要使用任意的浮点数(例如,你正在编写一个检测两个移动形状碰撞的函数(,只需记住,你应该永远不要使用相等。对于任意的浮点数来说,相等是毫无意义的。您可以使用类似Math.abs(b - a) < epsilon的东西,其中epsilon是以适合您的应用程序的方式选择的

最新更新