最近在做一个小系统,里面包含了价格的运算,由于整个系统都是后台页面,所以第一时间的想法就是在后台运算,然后把结果返回到前端。但是写完之后感受了一下体验不太好,所以就前后端都判断,双重保障......
平常写后台都知道目前很多编程语言,直接计算会不精确,同样的使用Js运算也一样,是因为在计算机语言计算时会把十进制转为二进制,再计算。但是由于一些小数在换成二进制的时候出现了无限循环,又由于位数有限,就会截取一部分,导致十进制数不精确。
但是各大编程语言也都封装了自己的精确计算库,Js我选择使用math.js
安装方式
1.包管理器安装math.js
npm install mathjs
2.cdn
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/4.0.1/math.min.js"></script>
示例
// functions and constants
math.round(math.e, 3) // 2.718
math.atan2(3, -3) / math.pi // 0.75
math.log(10000, 10) // 4
math.sqrt(-4) // 2i
math.pow([[-1, 2], [3, 1]], 2) // [[7, 0], [0, 7]]
// expressions
math.evaluate('12 / (2.3 + 0.7)') // 4
math.evaluate('12.7 cm to inch') // 5 inch
math.evaluate('sin(45 deg) ^ 2') // 0.5
math.evaluate('9 / 3 + 2i') // 3 + 2i
math.evaluate('det([-1, 2; 3, 1])') // -7
// chained operations
math.chain(3)
.add(4)
.multiply(2)
.done() // 14