js计算精度问题-保留两位有效数字

场景:js 四舍五入保留两位有效数字
首先想到的是.toFixed(),方法第一个实参就是保留小数点几位

在google浏览器下,

(10.175).toFixed(2//10.18
(100.175).toFixed(2)// 100.17

看了官方文档,在各个浏览器的兼容性堪忧,
所以四舍五入保留有效数字一定不能简单粗暴地用这种方式,否则后果就是要改。
那有没有更好的方式去解决这个问题呢,答案一定是yes,

那就是Math.round(num)
Math.round(num) 函数返回一个数字四舍五入后最接近的整数。
所以加入要保留两位小数就可以

Math.round(100.175* 100)/100;

但如果这样还担心有误差可以再一次四舍五入

Math.round(100.175* 100)/100.toFixed(2);
//如果多个地方调用
function formatTwo(num){
     
return (Math.round(num * 100 )/100).toFixed(2)
}

这是我目前用的方法
我有在mdn上看到一个方法,不过我没使用过,不清楚有没有什么坑。

function round(number, precision) {
     
    return Math.round(+number + 'e' + precision) / Math.pow(10, precision);
    //same as:
    //return Number(Math.round(+number + 'e' + precision) + 'e-' + precision);
}

round(1.005, 2);

好了,就写到这里,欢迎大家多多指教!

你可能感兴趣的:(javascript)