JS处理数学计算之痛
JS处理数学计算之痛
比如:
2.05*1.89*1.74*10000 67416.29999999999 而实际我们需要的是:67416.30,你用计算器得到的也是这个值,而非上面那个。 0.1+0.7 0.7999999999999999 期望答案:0.8
这些问题在跟钱扯上关系后就显得很重要,必须要去解决,至于为什么会这样网上大把解读,我就不再这儿啰嗦了。我们今天想要讨论的是如何解决问题。
当然在实际工作中只要能找到问题的根本原因,一般都能找到解决的办法,很多人建议可也自己写方法去解决,如果你足够牛逼且有时间当然可以,但是我当前的目标就是尽快解决问题,当然网上已经有人造好轮子了。
大而全的解决方法就是使用math.js了,不过这玩意儿太大,我下载后发现有500多kb,根本就不想把他引入到项目中
GitHub地址:https://github.com/josdejong/mathjs.git
测试:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.bootcss.com/mathjs/5.9.0/math.min.js"></script>
</head>
<body>
<script>
//没有使用math.js
console.log(1.1 * 100) // 110.00000000000001
console.log(0.1 + 0.2) // 0.30000000000000004
console.log(2.05*1.89*1.74*10000) //67416.29999999999
function printFn(value) {
const precision = 14
return Number(math.format(value, precision))
}
//使用math.js
console.log(printFn(1.1 * 100)) //110
console.log(printFn(0.1 + 0.2)) //0.3
console.log(printFn(2.05*1.89*1.74)*10000)//67416.3
</script>
</body>
</html>
第二个推荐插件
测试:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.bootcss.com/decimal.js/10.1.1/decimal.js"></script>
</head>
<body>
<script>
//没有使用decimal.js
console.log(1.1 * 100) // 110.00000000000001
console.log(0.1 + 0.2) // 0.30000000000000004
console.log(2.05*1.89*1.74*10000) //
//使用使用decimal.js
console.log(new Decimal(1.1).mul(new Decimal(100)).toNumber()) //110
console.log(new Decimal(0.1).plus(new Decimal(0.2)).toNumber()) //0.3
console.log(new Decimal(2.05).mul(new Decimal(1.89)).mul(new Decimal(1.74)).mul(new Decimal(10000)).toNumber())//67416.3
</script>
</body>
</html>
当然好友其他很多库,如:bignumber.js,还有big.js等,最后我是用了decimal.js,也就30kb左右,还能接受,操作起来有点像java的BigDecimal类。反正完全能够满足公司业务需求。

浙公网安备 33010602011771号