舍入到小数点后两位,javascript

时间:2013-03-14 03:38:06

标签: javascript tofixed

我想在javascript中将数字舍入到小数点后两位。 我在SO上发现很多帖子说.toFixed方法的行为对于不同的浏览器是不可预测的。

在许多地方找到了这个解决方案,毫无例外地被接受

Math.round(yournumber * 100 ) / 100

但是我发现这是正确的,但也有一些错误的结果,例如

Math.round( 1.27532423 * 100 ) / 100  = 1.28 // this seems correct
Math.round( 1.275 * 100 ) / 100       = 1.27 // as I understand it should also 1.28
Math.round( 1.276 * 100 ) / 100       = 1.28 

我错过了什么或者我的理解不正确吗?

修改

刚发现

1.275 * 100正在返回127.49999999999999,这就是原因,如果它返回127.5,它将产生正确的结果。

但是为什么它会返回127.49999999999999 ????

4 个答案:

答案 0 :(得分:1)

根据@ scott.korin评论已更改

Math.round( 1.27532423 * 100 ) / 100

Math.round( 1.27532423 * 10 * 10) / 100 // changed 100 to 10*10 

它就像一个魅力:)

谢谢!

答案 1 :(得分:0)

浮点数学仅精确到52nd binary place(大约是第16个十进制数)。虽然1.275应该向上舍入到1.28,但1.01000110011b == 1.274902d正确地向下舍入到1.27。

答案 2 :(得分:0)

以下是该问题的解决方法:

Math.round((1.275*100).toFixed(2))/100 // returns 1.28

可以在以下Q&A

中找到问题的说明

答案 3 :(得分:0)

为了避免这个浮点数舍入误差,我会将最大精度乘以10 ^ 21,如下所示

Math.round(1.275*Math.pow(10,21)/Math.pow(10,19))/100 == 1.28