为什么 49.90 % 0.10
在 JavaScript 中返回 0.09999999999999581
?我预计它是 0。
原文由 Edgar 发布,翻译遵循 CC BY-SA 4.0 许可协议
为什么 49.90 % 0.10
在 JavaScript 中返回 0.09999999999999581
?我预计它是 0。
原文由 Edgar 发布,翻译遵循 CC BY-SA 4.0 许可协议
Javascript 的 Number 使用“IEEE 双精度”来存储值。它们无法准确存储所有十进制数。将十进制数转换为二进制数时,由于舍入误差,结果不为零。
49.90 = 49.89999999999999857891452848...
0.10 = 0.10000000000000000555111512...
因此 floor(49.90 / 0.10) 只有 498,余数将是 0.09999….
看来您正在使用数字来存储美元金额。 不要这样做,因为浮点运算会传播并放大舍入误差。将数字存储为 美分 数量。整数可以精确表示, 4990 % 10
将返回0。
原文由 kennytm 发布,翻译遵循 CC BY-SA 3.0 许可协议
9 回答9.4k 阅读
6 回答5.1k 阅读✓ 已解决
5 回答3.6k 阅读✓ 已解决
4 回答8k 阅读✓ 已解决
7 回答10k 阅读
5 回答8.3k 阅读
2 回答10.4k 阅读✓ 已解决
因为 JavaScript 使用浮点数学,这会导致舍入错误。
如果您需要带两位小数的精确结果,请在运算前将您的数字乘以
100
,然后再除以:如有必要,圆形。