4

在处理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)

4

2 回答 2

0

不,呃。您尝试以二为基数进行数学运算。

简短的回答:你不能这样做。这就像试图重复添加十进制的 1/3。你得到 0.333333,然后是 0.666666,然后是 0.99999……但最后一个不应该是 3/3,换句话说 1?

为避免此问题,请尽可能对所有内容使用整数。

于 2013-10-24T19:04:11.420 回答
0

我认为这是因为用二进制表示一些浮点数所固有的问题。

阅读:-每个计算机科学家都应该知道的关于浮点运算的知识。

尝试使用toFixed来避免你的问题

使用定点表示法格式化数字。

于 2013-10-24T19:04:52.733 回答