Math.js解决前端精度
2022-07-01 05:49:54
2024-11-30 20:48:01
JS的加减乘除算
问题:0.1+0.2
js
console.log(0.1+0.2);
结果是:0.30000000000000004
JavaScript 浮点数运算结果不对,是因为浮点数的存储问题导致计算结果不对。
Math.js
Math.js是一个用于JavaScript和Node.js的扩展数学库。它具有支持符号计算的灵活表达式解析器,大量内置函数和常量,并提供了集成的解决方案来处理不同的数据类型,例如数字,大数,复数,分数,单位和矩阵,强大且易于使用。
特征
- 支持数字,大数,复数,分数,单位,字符串,数组和矩阵。
- 与JavaScript的内置Math库兼容,Math用法,一样,门槛低
- 包含一个灵活的表达式解析器。
- 进行符号计算。
- 带有大量内置函数和常量。
- 也可以用作命令行应用程序。
- 在任何JavaScript引擎上运行。
- 很容易扩展。
- 开源。
1、传统使用,引入math.js
javascript
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.bootcdn.net/ajax/libs/mathjs/8.1.0/math.min.js"></script>
</head>
<body>
<script>
const ans = math.add(0.1, 0.2); // 0.30000000000000004
console.log(
math.format(ans, {
precision: 14,
})
); // '0.3'
console.log(math.sqrt(4).toString()); // 2
</script>
</body>
</html>
2、npm安装
shell
npm i mathjs -S
使用
javascript
let $math = require('mathjs');
export const math = {
//
add() {
return comp('add', arguments)
},
subtract() {
return comp('subtract', arguments)
},
multiply() {
return comp('multiply', arguments)
},
divide() {
return comp('divide', arguments)
},
}
function comp(_func, args) {
let t = $math.chain($math.bignumber(args[0]));
for (let i=1; i<args.length; i++) {
t = t[_func]($math.bignumber(args[i]))
}
// 防止超过6位使用科学计数法
return parseFloat(t.done())
}
方法调用
javascript
// 可以传入多个参数
utils.math.add(0.1, 0.2, 0.5)
目录