项目中关于js计算出现精度问题
思路: 用round取个四舍五入, 然后再保留规定的小数位
// 以前使用的这种
num = Math.floor(+num * 100) / 100
// 存在精度丢失问题, 导致算出来的不对, 改为toFixed
// 使用toFixed后, 发现它用的不是4舍5入, 而是银行家算法, 并且在某些浏览器中, 这个规则会不生效.
// 因此改写了toFixed方法
Number.prototype.toFixed = function (val = 0) {
if (isNaN(val)) throw new Error('参数必须是数字或数字字符串!')
let num = Math.round(this * 10 ** val) / 10 ** val
if (val == 0) return num + ''
let temp = Number.isInteger(num) ? num + '.000000000' : num + '000000000'
return temp.slice(0, temp.indexOf('.') + val + 1)
}