Javascript round(),toFixed()和toPrecision()不正确

时间:2013-09-24 08:33:25

标签: javascript

我在javascript中使用这3个函数,直到我发现它们都给出了不正确的舍入值。 让我们说下面的Senario

var x = 1.49849;
Math.round(x) //return 1, but from what I learnt from school it should be 2, right?
x.toFixed()   //return 1 too! same as rounding
x.toFixed(3)  //return 1.498, shouldn't it be 1.499?
x.toFixed(4)  //return 1.4985, at least this is working correctly....

我试过toPrecision()它与toFixed()基本相同。

看起来javascript中的舍入只考虑一个数字,而忽略了小数点的其余部分。

这种类型的senario有没有解决方法?

我知道我总是可以在服务器端执行此操作,但我们只关注javascript。

1 个答案:

答案 0 :(得分:10)

不,你错了。

1.49849四舍五入到最接近的整数是1,因为小数点后面的第一个数字是4,小于5.

1.49849舍入到小数点后的三位数是1.498因为第4位是4。

只有当您舍入的第一个数字为5或更高时,它才会被四舍五入。在一些金融四舍五入系统中,精确的一半被四舍五入到最接近的偶数,所以2.5轮到2轮,但是3.5轮到4轮。