在处理measure.js时,TDD 的乐趣帮助我偶然发现了 javascript 引擎中暴露的一个非常奇怪的(至少在我看来是这样的)行为。
无论是进入控制台还是在脚本中执行,都会发生以下情况:
-1 + 0.85 --> -0.85 ✓
-1 + 1 --> 0 ✓
-1 + 1 + -.15 --> 0.15 ✓
-1 + 1.15 --> 0.1499999999999999 ?!?
这是在以下浏览器/操作系统下完全测试和复制的:
- FF 24.0 (Debian 3.10)
- 铬 30.0.1599.114 (Debian 3.10)
- 铬 30.0.1599.101m (Win7SP1)
- Internet Explorer 10.0.9200.16721 (Win7SP1)
由于这在不同的供应商中是一致的,我认为这一定有一个特定的原因,所以:
- 这是什么原因?
- 规避这种行为的最佳做法是什么,因为它给 JS 的精确计算带来了问题
更新:
最好的通俗易懂的解释,包括。迄今为止可在
http://floating-point-gui.de/找到多种编程语言的答案和解决方法 (thanx @RocketHazmat)