通过npm安装,运行:npm install mathjs
import { bignumber, chain } from "mathjs";
//根据math.js加减乘除计算封装,参数数字只能number和null类型,当数字超过2^54-1时,可能会出现精度问题
//因为引入chain,即便是按需引入,可能由于chain涉及到的数据方法太多,导致打包时,dist文件直接大了1M左右。
export const calculate = {
comp: function (_func, args) {
let t = chain(bignumber(args[0]));
for (let i = 1; i < args.length; i++) {
if (typeof args[i] === "number" || typeof args[i] === "null") {
t = t[_func](bignumber(args[i]));
}
}
// 防止超过6位使用科学计数法
return parseFloat(t.done());
},
//加
add: function () {
return this.comp("add", arguments);
},
//减
subtract: function () {
return this.comp("subtract", arguments);
},
//乘
multiply: function () {
return this.comp("multiply", arguments);
},
//除
divide: function () {
return this.comp("divide", arguments);
},
};
import { calculate } from "@/utils/index";
created() {
console.log(calculate.add(0.1,0.2)); // 0.3
console.log(calculate.subtract(0.1,0.2)); // -0.1
console.log(calculate.multiply(0.1,0.2)); // 0.02
console.log(calculate.divide(0.1,0.2)); // 0.5
console.log(calculate.add(0.1,0.2,0.3)); // 0.6
// 暂时没有封装多运算,如果需要链式运算,请参考https://www.mathjs.cn/examples/chaining.js.html进行封装
console.log(calculate.add(0.1,0.2).subtract(0.1)); // 报错
},
中文官方文档参考(目前不知道啥原因不能访问了):https://www.mathjs.cn/docs/getting_started.html
英文官方文档参考:https://mathjs.org/
通过npm安装:npm install --save decimal.js
import Decimal from "decimal.js";
// 根据Decimal.js加减乘除计算封装,传参转换后只能是数字类型,且不能超过最大安全整数,否则返回NaN
export function calculator(value) {
try {
if (
(Number(value) || value == 0) &&
!isNaN(value) &&
Math.abs(value) <= Number.MAX_SAFE_INTEGER
) {
const decimal = new Decimal(value);
return {
add(num) {
return decimal.add(num);
},
subtract(num) {
return decimal.sub(num);
},
multiply(num) {
return decimal.mul(num);
},
divide(num) {
return decimal.div(num);
},
};
} else {
Message.warning("请输入合理数字!");
const decimal = new Decimal(NaN);
return decimal;
}
} catch (error) {
console.error(error);
}
}
import { calculator } from "@/utils/index";
console.log(calculator(912).add(9.00719).toNumber());
//console.log(calculator(0.1).add(1.235).toFixed());
//console.log(calculator.add("0.2").add(0.1).getValue());
中文文档地址:https://lixingwu.gitee.io/decimal.js_cn/cn/index.html