2013-05-01 122 views
-3
console.log((57/100) * 100); 

当我在Javascript中使用这个数学时,它总是返回56.99999999。为什么它不是57.00000?为什么这个计算不会返回一个整数?

+4

这不限于JavaScript,但一般浮点运算的精度问题,http://floating-point-gui.de /。 – Xotic750 2013-05-01 11:10:43

+0

按照这个http://stackoverflow.com/questions/588004/is-javascripts-floating-point-math-broken – Trikaldarshi 2013-05-01 12:52:53

回答

2

为了得到一个确切的答案,您将需要使用整数,或使用一个小数库。 Javascript中有一些十进制库,它使用整数计算值,然后将值转换回十进制。例如,有用于Javascript的BigNumber库。

原因是(57/100)部分返回一个浮点数或Javascript中的浮点数。 JavaScript使用64-bit floating point numbers,在大多数系统上,它提供53位精度来表示尾数,或float的数值部分(3.2中的3.2)。大多数系统使用浮点标准,只要它在最后一个位置小于一个单位(对于IEEE-754 64位是第54位),就允许浮点运算出现任何错误。因此,所有花车都会被切断,舍入和/或截断,这就是为什么结果返回一个小数。

有关为什么发生这种情况的更多信息,你还可以看到:Is floating point math broken?

相关问题