一 js 计算精读出现的问题枚举
二 js 浮点计算 精度出现精读问题的原因
二 js 浮点运算解决方案 (保留多少位数小数,末尾实现四舍五入)
方法一: 自定义函数
function toFixed(n, d) {
if (n > Number.MAX_SAFE_INTEGER || n < Number.MIN_SAFE_INTEGER) {
throw new Error('超过js安全计算值范围,此函数暂不支持!');
}
const radix = 10 ** d;
let num = math.floor(n * radix);
const a = String(n).split('.');
if (a[1] && a[1].length >= d) {
if (Number(a[1][d]) >= 5) {
num += 1;
}
}
return num / radix;
}
方法二 利用mathjs 库
import { create, all, round } from 'mathjs';
const config = {
number: 'BigNumber',
precision: 64,
};
const mathJs = create(all, config);
// number 和 bignumber类型
// mathJs.evaluate('0.1 + 0.2'); // 0.3
// 默认保留两位小数,实现四舍五入
export const math = (expression, precision = 2) => {
return round(mathJs.number(mathJs.evaluate(expression)), precision);
};
math('0.1 + 0.2'); // 0.3