在measurement.js工作时,TDD的乐趣帮助我偶然发现了一个非常奇怪的事情(至少我发生在我身上)在javascript引擎中暴露的行为。
无论是进入控制台还是在脚本中执行,都会发生这种情况:
-1 + 0.85 --> -0.85 ✓
-1 + 1 --> 0 ✓
-1 + 1 + -.15 --> 0.15 ✓
-1 + 1.15 --> 0.1499999999999999 ?!?
这完全按照以下浏览器/操作系统进行测试和复制:
由于这在不同的供应商中是一致的,我认为必须有一个特定的原因,所以:
更新:
最好的可理解的解释,包括。到目前为止,在多种编程语言的答案和解决方法
http://floating-point-gui.de/(thanx @RocketHazmat)
答案 0 :(得分:0)
没有。你试着在二垒做数学。
简短回答:你不能这样做。这就像尝试重复添加十进制的1/3。你得到0.333333,然后是0.666666,然后是0.99999 ...但不应该最后一个是3/3,换句话说1?
要避免此问题,请尽可能使用整数。
答案 1 :(得分:0)
我认为这是因为在二进制中表示一些浮点数所固有的问题。
请阅读: - What Every Computer Scientist Should Know About Floating-Point Arithmetic.
尝试使用 toFixed 来避免您的问题
使用定点表示法格式化数字。