原文网址:JS--使用第三方库解决浮点数(小数)计算不准确的问题_IT利刃出鞘的博客-CSDN博客
简介
本文介绍如何解决JavaScript在计算浮点数(小数)时不准确(精度丢失)的问题。
问题描述
JS计算小数是不准确的
实例:
问题大全
// 加法
0.1 + 0.2 = 0.30000000000000004
0.2 + 0.4 = 0.6000000000000001
// 减法
1.5 - 1.2 = 0.30000000000000004
0.3 - 0.2 = 0.09999999999999998
// 乘法
19.9 * 100 = 1989.9999999999998
9.7 * 100 = 969.9999999999999
// 除法
0.3 / 0.1 = 2.9999999999999996
0.69 / 10 = 0.06899999999999999
// 比较
0.1 + 0.2 === 0.3 // false
(0.3 - 0.2) === (0.2 - 0.1) // false
JS的toFixed等也有问题
上述问题,有人可能想:使用JS的toFixed方法即可解决。但实际上,toFixed也有问题具体如下:
toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。例如将数据Num保留2位小数,则表示为:toFixed(Num)。toFixed()四舍五入的规则与数学中的规则不同,其使用的是银行家舍入规则,银行家舍入:所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法。具体规则如下:简单来说就是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。
实例(谷歌浏览器)
1.35.toFixed(1) // 1.4 正确
1.335.toFixed(2) // 1.33 错误
1.3335.toFixed(3) // 1.333 错误
1.33335.toFixed(4) // 1.3334 正确
1.333335.toFixed(5) // 1.33333 错误
1.3333335.toFixed(6) // 1.333333 错误
解决方案:用第三方库
以下三方库越往下占空间越大。
number-precision
见:number-precision--使用/实例_IT利刃出鞘的博客-CSDN博客
big.js
见:big.js--使用/实例_IT利刃出鞘的博客-CSDN博客
bignumber.js
见:bignumber.js--使用/实例_IT利刃出鞘的博客-CSDN博客
decimal.js
见:decimal.js--使用/实例_IT利刃出鞘的博客-CSDN博客