【转】js四舍五入tofixed和Math.round方法
原文地址:http://www.jsphp.net/js/show-9-147-1.html
javascript中四舍五入我们用的是Math.round,但是Math.round的只根据小数位第一位进行四舍五入,需要Math.round(num*100)/100 这种形式进行转化下。
js四舍五入方法之Math.round()
定义:
round() 方法可把一个数字舍入为最接近的整数,根据“round”的字面意思“附近、周围”,可以猜测该函数是求一个附近的整数。
例如:Math.round(x),则是将x取其最接近的整数。其取舍的方法使用的是四舍五入中的方法,符合数学中取舍的规则。对于小数的处理没有那么便捷,但是可以根据不同的要求,进行自定义的处理。
语法
Math.round(x)
x 必需。必须是数字。返回值是与 x 最接近的整数。
例子:
小数点后第一位<5
正数:Math.round(11.46) = 11
负数:Math.round(-11.46) = -11
小数点后第一位>5
正数:Math.round(11.68) = 12
负数:Math.round(-11.68) = -12
小数点后第一位=5
正数:Math.round(11.5)=12
负数:Math.round(-11.5)=-11
总结:(小数点后第一位)大于五全部加,等于五正数加,小于五全不加。
重点:这种方法的缺点是,只能是1位小数位进行四舍五入,那我们要是有2位、3位小数要进行四舍五入呢?
对于这个问题其实很简单,比如我们要 11.687 这个数我们要四舍五入且保留2为小数,我们可以 Math.round(11.687*100)/100
如果是 11.3458 要保留3位小数,且对末尾小数进行四舍五入呢 Math.round(11.3458*1000)/1000
有几位小数,就乘以几个零。
每次都这样写比较麻烦,干脆正一个函数好了
/** * 四舍五入 * @param {[type]} num [待处理数字] * @param {[type]} decimal [需要保留的小数位] * @return {[type]} [] */ function round(num, decimal) { if (isNaN(num)) { return 0; } const p1 = Math.pow(10, decimal + 1); const p2 = Math.pow(10, decimal); return Math.round(num * p1 / 10) / p2; } console.log(round(10.11, 2)) // 10.11 console.log(round(10.16, 1)) // 10.2 console.log(round(10.116, 3)) // 10.116 console.log(round(10.11111, 4)) // 10.1111
js四舍五入tofixed方法
定义:
toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。例如将数据Num保留2位小数,则表示为:toFixed(Num);
但是其四舍五入的规则与数学中的规则不同,使用的是银行家舍入规则,银行家舍入:所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法。
具体规则如下:
简单来说就是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。
显然这种规则不符合我们平常在数据中处理的方式。为了解决这样的问题,我们更多的还是使用Math.round方法进行自定义式 的实现指定保留多少位数据进行处理。
语法
NumberObject.toFixed(num)
返回值
返回 NumberObject 的字符串表示,不采用指数计数法,小数点后有固定的 num 位数字。不够位数小数位的,会用0不足。
1.35.toFixed(1) = 1.4
1.35.toFixed(2) = 1.35
1.35.toFixed(3) = 1.350
刚才也说了toFixe()用的是银行家舍入规则,那么会出现啥情况呢,与我们平时用的四舍五入的出入在哪里呢
1.35.toFixed(1) // 1.4 正确 1.335.toFixed(2) // 1.33 错误 1.3335.toFixed(3) // 1.333 错误 1.33335.toFixed(4) // 1.3334 正确 1.333335.toFixed(5) // 1.33333 错误 1.3333335.toFixed(6) // 1.333333 错误
总结:javascript中四舍五入我们用的是Math.round,但是Math.round的只根据小数位第一位进行四舍五入,需要用Math.round(num*100)/100 这种形式进行转化下。

浙公网安备 33010602011771号