-3
console.log((57 / 100) * 100);

当我用 Javascript 做这个数学运算时,它总是返回 56.99999999。为什么不是 57.00000?

4

2 回答 2

4

这与 JavaScript 处理浮点数的方式有关。查看此主题:如何处理 JavaScript 中的浮点数精度?

于 2013-05-01T11:05:51.503 回答
2

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

原因是该部分(57 / 100)返回一个Float或 Javascript 中的浮点数。JavaScript 使用64 位浮点数,在大多数系统上,它提供 53 位精度来表示尾数或浮点数的数字部分(3.2e4 中的 3.2)。大多数系统使用IEEE-754浮点标准,它允许浮点运算的任何错误,只要它在最后一位小于一个单位(在 IEEE-754 64 位的情况下是第 54 位) . 因此,所有浮点数都被截断、舍入和/或截断,这就是结果返回小数的原因。

有关为什么会发生这种情况的更多信息,您还可以查看:浮点数学是否损坏?

于 2013-05-01T11:49:31.040 回答