我正在使用 JavaScript,但问题很普遍。取这个舍入误差:
>> 0.1 * 0.2
0.020000000000000004
This StackOverflow answer提供了一个很好的解释。本质上,某些十进制数不能用二进制精确表示。这是直观的,因为 1/3 在 base-10 中有类似的问题。现在解决方法是:
>> (0.1 * (1000*0.2)) / 1000
0.02
我的问题是这是如何工作的?
最佳答案
这是行不通的。您在那里看到的不是完全 0.02
,而是一个足够接近(15 位有效小数位)看起来像的数字。
碰巧将一个操作数乘以 1000,然后将结果除以 1000,会导致产生明显“正确”结果的舍入误差。
您可以在浏览器的控制台中亲自查看效果。使用 Number.toString(2)
将数字转换为二进制,您会看到不同之处:
相关性并不意味着因果关系。
关于javascript - 为什么乘以和除以N "fix"浮点表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24172403/