繁体   English   中英

Javascript:四舍五入到小数点后两位

[英]Javascript: Rounding up to 2 decimal places

我正在尝试将 Javascript 中的数字四舍五入到两位小数。 我查阅了以下 Stack Overflow 帖子以获取指导:

四舍五入至小数点后 2 位(仅在必要时)

现在,在那篇文章中,似乎有两种方法可以做到这一点。 一个是toFixed(2) ,另一个是Math.round((num + Number.EPSILON) * 100) / 100 ,后者似乎是最被接受的方法。

因此,鉴于数字249.025 ,这是有效的。 两种方法249.03按预期产生249.03 然而,给定数字294.025 (翻转49 ),两种方法都失败,并产生294.02

这是一个 JSFiddle 来演示: https ://jsfiddle.net/uj8x4khn/

我的问题:是否有一种舍入方法适用于这两个数字(和任何数字)?

也很好奇:为什么它适用于一个数字而不是一个非常相似的数字?

原因是 294.025 不完全是294.025,而是略小一些,因为浮点数不能精确表示该数字。 你会注意到,当你乘以 100 时,它甚至不显示为 29402.5,而是显示为 29402.499999999999

解决这个问题的最好方法是只进行整数运算。 如果您使用货币单位,请以美分计算所有内容,而不是以货币的主要单位计算。 如果您使用 4 位小数,则从整数开始,并将整数的 4 个最低有效数字表示为小数部分。 只有当您真正想要显示它时,才将其除以适当的 10 次幂。但永远不要存储该结果以供进一步计算。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM