前言
最近在业务中涉及到价格之类的计算,由于Js本身的计算存在精度问题,便找了几款提供高精度计算的库,最后选择了GitHub上Star数量最多的mathjs,并记录一下基本的使用方法。
mathjs是用于JavaScript和NodeJS的数学库。它内置大量函数与常量,并提供集成解决方案来处理不同的数据类型,如数字,大数字,复数,分数,单位和矩阵等。
使用
- 安装
npm i mathjs
基本使用
最基本的加减乘除运算,代码中的format用于格式化输出,其中precision参数用于指定格式化精度的位数
import { create, all } from "mathjs";
// 创建mathjs实例
const mathjs = create(all, {
number: "BigNumber",
precision: 20,
});
// add
const add = (num1, num2) => +mathjs.format(mathjs.add(1, 2), {
precision: 16,
})
// subtract
const subtract = (num1, num2) => +mathjs.format(mathjs.subtract(1, 2), {
precision: 16,
})
// multiply
const multiply = (num1, num2) => +mathjs.format(mathjs.multiply(1, 2), {
precision: 16,
})
// divide
const multiply = (num1, num2) => +mathjs.format(mathjs.divide(1, 2), {
precision: 16,
})
链式计算
支持输入一个初始值进行链式计算
import { create, all } from "mathjs";
const mathjs = create(all, {
number: "BigNumber",
precision: 20,
});
// 111
console.log(mathjs.format(mathjs.chain(1.11).multiply(100).done(), {precision: 16}));
配置
mathjs支持配置来创建实例
import {} from 'mathjs';
const maht = create(all, {
epsilon: 1e-12,
matrix: 'Matrix',
number: 'number',
precision: 64,
predictable: false,
randomSeed: null
})
支持的配置有
-
epsilon,用于测试两个比较值之间是否相等的最小相对差异。所有关系功能都使用该值。默认值为1e-12 -
matrix,函数的矩阵输出的默认类型。可用值为:('Matrix'默认值)或'Array'。在可能的情况下,函数的矩阵输出类型取决于函数输入:将数组作为输入将返回数组,将矩阵作为输入将返回矩阵。如果没有矩阵作为输入,则输出类型由option决定matrix。对于混合矩阵输入,将始终返回矩阵。 -
number,指定实例的输入输出类型,默认值为number,可选值为:number | BigNumber -
precision,BigNumbers的最大有效位数。此设置仅适用于BigNumbers,不适用于数字。默认值为64。 -
predictable,功能的可预测输出类型。如果为true,则输出类型仅取决于输入类型。如果为false(默认),则输出类型可以根据输入值而变化。例如,当predictable为false时math.sqrt(-4)返回complex('2i'),为trueNaN时返回。以编程方式处理计算结果时,可能需要可预测的输出,但对于评估动态方程式的用户可能不方便。 -
randomSeed,将此选项设置为种子伪随机数生成,使其具有确定性。每次设置此选项时,都会使用提供的种子重置伪随机数生成器。例如,将其设置为每次设置该选项'a'后将导致在第一次呼叫时math.random()返回0.43449421599986604。设置为null使用随机种子为伪随机数生成器提供种子。默认值为null。