a-calc
A library of string four operations, which supports operations such as format output of thousandth decimal point
(一个字符串四则运算的库, 可以解决前端数字计算精度和科学记数法的问题, 支持千分位小数点格式化输出等操作)
安装
npm install a-calc
使用方式
支持的运算符: + - * / %
快速使用:
该库导出两个函数,一个是 calc 一个 fmt; calc 用于计算与格式化; fmt 专门用于格式化
calc有两种使用方式, 一种是传入字符串四则运算就会返回计算结果; 一种是当成标签字符串例如 calc`1 + 1` 这个也会计算并返回值
calc("1 + 1")
与 calc`1 + 1` 等价 fmt 也如此
fmt只有一种使用方式, fmt(“10000 | ,”) 返回 10000的千分位表示, fmt(“100 | =2”) 返回 100.00
注意: 在 es module 中导入必须使用 import a_calc from “a-calc”
然后结构 const {calc, fmt} = a_calc
, 在 commonjs 中没这个限制
纯计算:
import a_calc from "a-calc"
const { calc } = a_calc
calc("0.1 + 0.2")
calc("-0.1 + -0.2 * 0.3")
let a = 0.1
let b = 0.2
calc`1 + ${a} - ${b}`
格式化(千分位, 小数点控制):
import a_calc from "a-calc"
const { calc } = a_calc
calc("100000 + 100 | ,")
calc("1 + 1 | =2")
calc("10.001 - 0.001 | <=2")
calc("100.00001 | >=5")
calc("1000000.000001 | = 2 ,")
单数字格式化
正常来说 calc 的字面意思就是计算一个值, 格式化的标识是在计算之后顺便做的一个事情, 但是有些时候希望对单个的数字进行格式化, 这种情况其实也可以使用 calc
calc("10000 | ,")
这也是可行的, 可以认为一个数字的格式化也是经过计算得出的, 这种说法就没有什么问题, 但是如果你真的需要一个更好的语义那么可以通过如下的方式, 但是 calc 和 fmt 在做格式化的时候区别主要是名称的不同而已
import a_calc from "a-calc"
const { fmt } = a_calc
fmt("10000.000001 | ,")
fmt("0.123456 | =2")
fmt("1111111.123456 | =2,")
注意
- 禁止书写单值括号, 例如
calc("(1) * 2 / (-0.001)")
这是严厉禁止的, 虽然实现对这个写法的支持使比较简单的, 但是我认为这种写法完全没有必要, 而且还要多写逻辑