JS--使用第三方库解决浮点数(小数)计算不准确的问题

原文网址: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博客

mathjs

见:mathjs--使用/实例_IT利刃出鞘的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/feiying0canglang/article/details/125116917