Number 类型使用 IEEE 754 格式表示整数和浮点值,精度丢失的本质就是浮点数转化为该标准的二进制的过程中出现的丢失。为了解决该问题,重写tofixed()方法解决该问题
// 至于乘法 加法 减法 除法 运算重写 可以自己取百,又很多帖子
// 重写取余数方法
function round(num, s) {
// 如果传入的值是整数或者是有限小数直接返回,这里取小数点后16位作为无限小数的区分标志
if (Number.isInteger(num) || num.toString().split('.')[1].length !== 16) {
return num;
}
const changeVal = num.toString().split('.')[1];
const times = Math.pow(10, s);
let des;
// 根据无限循环小数 做四舍五入
des = Number(changeVal[0]) >= 5 && Number(changeVal[changeVal.length - 1]) >= 5? num * times + 0.5: num *times
des = parseInt(des, 10) / times;
return des;
}