问题描述
在日常开发过程中,我们免不了的遇到需要四舍五入保留几位小数的场景。通常我们会使用js中提供的toFixed的api去完成这一需要。但是在开发过程中我们会发现在chrome和火狐浏览器下,使用toFixed会产生精度丢失的情况:
产生原因
这是为什么呢,经过查询我们得知,在chrome和火狐浏览器中toFixed时使用的银行家四舍五入法,该方法的规则是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。
解决方法
我们可以用Math.round来规避这个问题,具体方法如下
/**
* @description 使用Math.round实现四舍五入
* @param {*} num 需要四舍五入的数字
* @param {*} n 需要保留的小数位
*/
function roundOff(num, n) {
if (typeof num === 'number') {
// 只对数字类型进行操作
let multiple = Math.pow(10, n);
return (Math.round(num * multiple) / multiple).toFixed(n);
}
return num;
}