实际项目当中遇到这样一个问题,就是js计算会出现无穷大小数,所以选择用toFixed(num)方法,其中num设置过大,小数点后位数不够会用0进行补位,用户体验非常不好。
js计算会出现无穷大数的原因
js中只有Number一种类型,并且 Number采用的时IEEE 754 64位双精度浮点数编码 。比如0.1 + 0.2 = 0.30000000000000004,计算时会把0.1和0.2转换成二进制数,计算后在转成十进制就成了0.30000000000000004。
将每个浮点数乘以10的N次方,计算完成后再除以10的N次方
1 | formatFloat(f,digit){ |
f是计算表达式,digit是需要乘以10的多少次方。
比如:formatFloat(0.1+0.2,2);
return返回的结果是:0.3
toFixed()方法舍入规则
toFixed()方法使用的是银行家舍入规则。四舍六入五成双,即“4舍6入5凑偶”这里“四”是指≤4 时舍去,”六”是指≥6时进上,”五”指的是根据5后面的数字来定,当5后有数时,舍5入1;当5后无有效数字时,需要分两种情况来讲:①5前为奇数,舍5入1;②5前为偶数,舍5不进。(0是偶数)
最终解决方案
1 | Number.prototype.fixed=function(len) |
根据以上方法就可以既保留小数位数,并且位数不足时不在补0。