总结:
-
如果要进行公式计算:
math.evaluate('1.2 * (2 + 4.5)') // 7.8 复制代码
-
实现高精度:
import * as math from 'mathjs' // 正常的使用,仍旧会出现这种情况 0.1 + 0.2 // 0.30000000000000004 math.add(0.1, 0.2) // 0.30000000000000004 // 使用format即可实现高精度 const ans = math.add(0.1, 0.2) // 0.30000000000000004 math.format(ans, {precision: 14}) // '0.3' // 或者使用bignumber math.add(0.1, 0.2) // Number, 0.30000000000000004 math.divide(0.3, 0.2) // Number, 1.4999999999999998 math.add(math.bignumber(0.1), math.bignumber(0.2)) // BigNumber, 0.3 math.divide(math.bignumber(0.3), math.bignumber(0.2)) // BigNumber, 1.5 复制代码
情景:
最近做项目,关于金融的,关于金融的话,那么必然涉及到数据计算,在金融里,很小的0.000000000001在面对巨大的金额时,也是会产生额外的费用的,所以需要数据高度精确。本人使用过bigNumber.js以及mathjs,个人推荐mathjs,因为它有以下几点:
-
支持数字,大数,复数,分数,单位,字符串,数组和矩阵。
-
与JavaScript的内置Math库兼容。
-
包含一个灵活的表达式解析器。
math.evaluate('1.2 * (2 + 4.5)') // 7.8 复制代码
-
进行符号计算。
-
带有大量内置函数和常量。
-
也可以用作命令行应用程序。
-
在任何JavaScript引擎上运行。
-
很容易扩展。
-
开源。