我在我的FireFox和Chrome控制台中都尝试了这个表达式:
17.99 * 100;预期结果: 1799 实际结果: 1798.9999999999998
我也试过:
parseInt(17.99 * 100);预期结果: 1799 实际结果: 1798
为什么会发生这种情况,以及如何获得预期的结果?
发布于 2014-02-21 17:03:08
浮点算法不是一门精确的科学。原因是,在内存中,您的精度存储在二进制(所有的幂为2)。如果它不能用精确的2的幂表示,你可能会得到一些丢失的精度。
你的数字,1798.9999999999998已经失去了足够的精度,以至于它在乘法中没有加起来。
发布于 2014-02-21 17:05:55
试试这个:
Math.round(17.99*100)正如前面的答案所解释的那样,将浮点数乘以并不是精确的科学;您可以做的是期望在一定的精度范围内得到结果。看看Number.prototype.toPrecision()。
(17.99*100).toPrecision(4)https://stackoverflow.com/questions/21940511
复制相似问题