当前位置: 首页 > Web前端 > JavaScript

JavaScript对toFixed的计算规则

时间:2023-03-27 01:22:09 JavaScript

在标准浏览器中,该方法得到的值看起来像是四舍五入。但实际上并不是一般数学意义上的四舍五入。我们可以找到反例,如下:上面前三个例子的小数点后三位都是5,一般情况下应该加1,这里都四舍五入了。第四个也是5,但是结果是前一位加5后的1四舍五入。是不是觉得有点懵( ̄ェ ̄;)?网上很多人说这个方法是庄家四舍五入。所谓庄家四舍五入法,本质上就是一种四舍五入法(又称四舍五入,保二倍)。具体规则是:四舍五入考虑,如果第五位不为零,则向上取整,如果第五位为零,则检查奇偶,如果第五位为偶数,则向上取整,如果第五个是奇数,则应向上舍入。按照这个规则,10.1250.toFixed(2)得到的值应该是10.12(即使前五位四舍五入)。好吧,试试看,你会得到以下结果。所以,这也不是银行家的四舍五入。我查看了它的计算规则,大致是这样的:当指定的最后一位小数不是5时,向上取整。如果是5,先得到一个保留前一个数字四舍五入后的值A,和一个两个值减去原数的值B,比较两个差值的绝对值,取A或B对应绝对值较小的差值作为返回值。如果差的绝对值相同,则返回前一个数字四舍五入后的值,即返回B。可能不太容易理解。案例如下:10.215.toFixed(2),指定小数点后两位,指定数后的下一个数为5。执行以上规则得到两个值A=10.21B=10.22A-10.215=-0.00499999999999999005B-10.215=0.00500000000000000782第一个差异的绝对值较小,因此最终回报为10.2110.515.tofixed(2)第二个差值较小,所以最终返回的是B10.5210.125.toFixed(2)A=10.12B=10.13A-10.125=-0.005000000000000782B-10.125=0.0050000000两个差值的绝对值0700相等,所以最终returnisB10.13及以上是标准浏览器中toFixed方法的计算规则。如果是在IE浏览器中,toFixed方法就变成了真正的四舍五入(只在IE11中模拟其他版本的IE,请以实际表现为准)。总结:使用js原生的toFixed()进行四舍五入,很可能会得到错误的结果。其他可用的舍入方法:Math.round(xx.xxx*100)/100