详解js四舍五入tofixed和Math.round方法
在javascript:里数值计算一直存在着很多的问题,今天我们就不一一探讨了。今天我们主要是解决在js四舍五入是怎么实现的。在JS里四舍五入还是比较麻烦的呢,没有php四舍五入那么简单,下面我们就来分析下。
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 这种形式进行转化下。
版权声明
本站部分原创文章,部分文章整理自网络。如有转载的文章侵犯了您的版权,请联系站长删除处理。如果您有优质文章,欢迎发稿给我们!联系站长:
愿本站的内容能为您的学习、工作带来绵薄之力。
评论