1 、tofixed方法
toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。例如将数据Num保留2位小数,则表示为:toFixed(Num);但是其四舍五入的规则与数学中的规则不同,使用的是银行家舍入规则,银行家舍入:所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法。具体规则如下:
简单来说就是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。
举例说明
11.556 = 11.56 ------六入
11.554 = 11.55 -----四舍
11.5551 = 11.56 -----五后有数进位
11.545 = 11.54 -----五后无数,若前位为偶数应舍去
11.555 = 11.56 -----五后无数,若前位为奇数应进位
(0.05).toFixed(1) //0.1
(0.15).toFixed(1) //0.1
(0.25).toFixed(1) //0.3
(0.35).toFixed(1) //0.3
(0.45).toFixed(1) //0.5
(0.55).toFixed(1) //0.6
(0.65).toFixed(1) //0.7
(0.75).toFixed(1) //0.8
(0.85).toFixed(1) //0.8
(0.95).toFixed(1) //0.9
然而也不完全是银行家进位法
显然这种规则不符合我们平常在数据中处理的方式。为了解决这样的问题,可以自定义去使用Math.round方法进行自定义式 的实现指定保留多少位数据进行处理。
2 、round方法
round() 方法可把一个数字舍入为最接近的整数。例如:Math.round(x),则是将x取其最接近的整数。其取舍的方法使用的是四舍五入中的方法,符合数学中取舍的规则。对于小数的处理没有那么便捷,但是可以根据不同的要求,进行自定义的处理。
例如:对于X进行保留两位小数的处理,则可以使用Math.round(X * 100) / 100.进行处理。
Math.round(0.5) //1
Math.round(1.5) //2
Math.round(2.5) //3
Math.round(8.5) //9
Math.round(9.5) //10
Math.round(0.05 * 10) / 10 //0.1
Math.round(0.15 * 10) / 10 //0.2
Math.round(0.25 * 10) / 10 //0.3
Math.round(0.85 * 10) / 10 //0.9
Math.round(0.95 * 10) / 10 //1
//如果需要强制保留小数位数,再加上toFixed就可以了
(Math.round(0.95 * 10) / 10).toFixed(1) //1.0
封装
//小数四舍五入,f精度范围[0,10]
Number.prototype.numberRound = function (f) {
return NumberRound(this, f);
}
String.prototype.numberRound = function (f) {
return NumberRound(this, f);
}
function NumberRound(n, f) {
n = parseFloat(n);
f = (f == "" || isNaN(f)) ? 0 : (f > 10 ? 10 : parseInt(f));var x = Math.pow(10, f);
return Math.round(n * x) / x;
}
(0.15).numberRound(1) //0.2
"0.15".numberRound(1) //0.2
"0.15".numberRound("") //0 空,精度为0
"0.15".numberRound("abc") //0 非数字,精度为0
"0.15".numberRound(10000) //0.15 超出精度最大值,精度为10
(0.095).numberRound(1).toFixed(2) //0.10
网友评论