JavaScript乘法算术

时间:2014-02-21 16:59:27

标签: javascript math multiplication floating-point-precision integer-arithmetic

我在FireFox和Chrome控制台中尝试了这个表达式:

17.99 * 100;
  

预期成果:1799

     

实际结果:1798.9999999999998

我也尝试过:

parseInt(17.99 * 100);
  

预期成果:1799

     

实际结果:1798

为什么会发生这种情况,如何获得预期结果?

2 个答案:

答案 0 :(得分:1)

浮点运算不是一门精确的科学。原因是在内存中,您的精度以二进制形式存储(所有2的幂)。如果无法用2的精确幂表示,则可能会失去精度。

你的号码1798.9999999999998有足够的精确度丢失,但它没有在乘法中向上舍入。

http://en.wikipedia.org/wiki/IEEE_floating_point

答案 1 :(得分:0)

试试这个:

Math.round(17.99*100)

正如前面的答案所解释的那样,乘以一个浮点数并不是精确的科学;你能做的是期望在一定的精度范围内得到一个结果。看看Number.prototype.toPrecision()。

(17.99*100).toPrecision(4)