1. toFixed()
toFixed() 方法可把 Number 四舍五入为指定小数位数的数字
看到题目大部分人第一反应就是用 toFixed(),其实 toFixed() 方法有个坑:
但是其四舍五入的规则与数学中的规则不同,使用的是银行家舍入规则
所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法。
简单来说就是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。
> (3.61).toFixed(1) //四舍
'3.6'
> (3.69).toFixed(1) //六入
'3.7'
> (3.651).toFixed(1) //五考虑,五后非零,进
'3.7'
> (3.65).toFixed(1) //五考虑,五后为零,五前为偶数,舍去
'3.6'
> (3.75).toFixed(1) //五考虑,五后为零,五前为奇数,进
'3.8'
显然这种规则不符合我们平常在数据中处理的方式,特别是在做跟钱有关的计算时,不同浏览器处理的方式也有所不同,所以尽量不要用这个。
2. round 方法
round() 方法可把一个数字舍入为最接近的整数。跟数学中取舍的规则一样。
Math.round(X * 100) / 100
下面是我项目中用到的方法,
function fomatFloat(num, n) {
var f = parseFloat(num);
if (isNaN(f)) {
return false;
}
f = Math.round(num * Math.pow(10, n)) / Math.pow(10, n); // n 幂 向上取整
var s = f.toString();
var rs = s.indexOf('.');
//判定如果是整数,增加小数点再补0
if (rs < 0) {
rs = s.length;
s += '.';
}
while (s.length <= rs + n) {
s += '0';
}
return s;
}