最近朋友问到了toFixed(),有一种方式就是进行四舍五入的规则进行小数点后面的尾数处理,以前一直以为toFixed方法就是四舍五入的
QQ交流群 272712006
- toFixed还不同的浏览器实现,在IE10及以上里面是正常的四舍五入,但是别的浏览器里面就不一样了,它不是正常的四舍五入(等下重点说),比如:
var a = 0.045;
console.log(a.toFixed(2))
// IE 0.05
//chorme 0.04
- toFixed它是一个四舍六入五成双的诡异的方法(也叫银行家算法),"四舍六入五成双"含义:对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,这种修约(舍入)规则是“四舍六入五成双”,也即“4舍6入5凑偶”这里“四”是指≤4 时舍去,"六"是指≥6时进上,"五"指的是根据5后面的数字来定,当5后有数时,舍5入1;当5后无有效数字时,需要分两种情况来讲:①5前为奇数,舍5入1;②5前为偶数,舍5不进。(0是偶数)
- 经过我的测试发现,在chorme下面(最新版),并没有完全遵守这个规则,尤其是5的后面没有数字的时候,不是这么判断的
总之这个四舍五入是不准确的, 网上查了封装的方法又太复杂, 所以自己写了一个方法
let a = 0.045;
console.log(fixed(a, 2));
function fixed(num, digits){
let dig = Math.pow(10, digits);
return Math.round(num * dig) / dig;
}
得到结果 不管是哪个浏览器 都没有问题
赶快去试一下吧
简书coderYJ
微信公众号coderYJ
微博coderYJ
网友评论