为什么模数运算符在 javascript 中返回小数?

新手上路,请多包涵

为什么 49.90 % 0.10 在 JavaScript 中返回 0.09999999999999581 ?我预计它是 0。

原文由 Edgar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 255
2 个回答

因为 JavaScript 使用浮点数学,这会导致舍入错误。

如果您需要带两位小数的精确结果,请在运算前将您的数字乘以 100 ,然后再除以:

 var result = ( 4990 % 10 ) / 100;

如有必要,圆形。

原文由 Aaron Digulla 发布,翻译遵循 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏