控制台中4.08-1.36的结果

时间:2012-11-16 14:20:01

标签: javascript google-chrome firebug google-chrome-devtools

  

可能重复:
  Is JavaScript’s Math broken?

当我尝试在Chrome控制台或Firebug中运行 4.08-1.36 时,我注意到了一种奇怪的行为。 当结果应为2.72时,控制台返回 2.7199999999999998

我想知道这怎么可能。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

这是因为您正在处理浮点数。虽然整数值对于给定范围具有设定数量的可能性(即,正好有10个值,从0到9,包括0和9),但一旦开始添加小数点值,最终会有无限多种可能性。为了能够将这些值存储在固定的存储空间中,计算机应用浮点运算,该运算使用允许将大量数字存储在该固定存储空间中的近似值。由于这种近似,你有时会得到看似奇怪的结果,就像你的结果差不多,但并不完全是你所期待的结果。

有关详细信息,请参阅http://en.wikipedia.org/wiki/Floating_point

答案 1 :(得分:3)

计算机以二进制而不是十进制存储数字。就像你不能精确地以十进制形式表示1/3的分数一样,你不能完全用二进制表示1/10的分数,这意味着有许多值可以用十进制形式精确表示但不能以二进制形式表示。

您的示例中的所有数字都属于此类别。在二进制中,十进制数4.08变为100.00010100011110101110 ...,其中二进制点之后的那些数字永远重复。另一个值1.36,变为1.01011100001010001111 ....,它们的差值2.72,在每种情况下变为10.10111000010100011110 ...,也有无限重复的二进制分数。

当转换回十进制以供人类观看时,计算机会四舍五入到最接近的匹配,这并不总是预期的准确值。