js的浮点运算存在精度问题
原因:js对于number
类型的数使用的是IEEE754标准中的双精度数存储,总共64位,其中:1位符号位,11位指数位以及52位小数位;表示小数时,超出小数精度的要进行"零舍一入"操作,因此,对小数相加,实际也要对结果进行零舍一入操作,导致精度问题
首先进行大数计算配置:
window.math.config({
number: 'BigNumber', // Default type of number:
// 'number' (default), 'BigNumber', or 'Fraction'
precision: 64 // Number of significant digits for BigNumbers
});
调用方式:
function calculate(str) {
return parseFloat(math.format(math.eval(str)));
}
注意:必须使用math.format()
进行转换