详解js四舍五入tofixed和Math.round方法

来源:网络 文章列表 2019-05-11 8
javascript中四舍五入我们用的是Math.round,但是Math.round的只根据小数位第一位进行四舍五入,需要Math.round(num*100)/100 这种形式进行转化下。

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 这种形式进行转化下。

版权声明

本站部分原创文章,部分文章整理自网络。如有转载的文章侵犯了您的版权,请联系站长删除处理。如果您有优质文章,欢迎发稿给我们!联系站长:
愿本站的内容能为您的学习、工作带来绵薄之力。

评论

  • 随机获取
点击刷新
精彩评论

友情链接