Math.js解决前端精度

2022-06-30 21:49:54
2024-06-18 02:23:51

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)
目录
暂无评论,欢迎留下你的评论

运营需要亿点资金维持,您的支持,是小白龙创作的动力!!!

昵称
留言
赞赏金额