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

Jer*_*Lam -4 javascript

我在javascript中使用这3个函数,直到我注意到它们都给出了不正确的舍入值.让我们说下面的事件

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....
Run Code Online (Sandbox Code Playgroud)

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

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

这种类型的Senario有没有javascript工作?

我知道我总是可以在服务器端这样做,但我们只关注javascript.

Pio*_*ski 10

不,你错了.

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

1.49849小数点后四舍五入为1.498,因为第4位为4.

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