我在FireFox和Chrome控制台中尝试了这个表达式:
17.99 * 100;
预期成果:1799
实际结果:1798.9999999999998
我也尝试过:
parseInt(17.99 * 100);
预期成果:1799
实际结果:1798
为什么会发生这种情况,如何获得预期结果?
答案 0 :(得分:1)
浮点运算不是一门精确的科学。原因是在内存中,您的精度以二进制形式存储(所有2的幂)。如果无法用2的精确幂表示,则可能会失去精度。
你的号码1798.9999999999998
有足够的精确度丢失,但它没有在乘法中向上舍入。
答案 1 :(得分:0)
试试这个:
Math.round(17.99*100)
正如前面的答案所解释的那样,乘以一个浮点数并不是精确的科学;你能做的是期望在一定的精度范围内得到一个结果。看看Number.prototype.toPrecision()。
(17.99*100).toPrecision(4)