五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網 會員登陸 & 注冊

javascript中如何解決精度丟失問題

2023-09-05 15:07 作者:bengdour  | 我要投稿

在項目開發(fā)中,你一定遇到過精度丟失的問題!比如某個無良的后端返回了一個超16位的數字訂單號,比如0.1+0.2 != 0.3等等:



01

精度丟失的原因

是什么原因造成的捏?

嗯?大道理咱也不會說,問就是一句話回復:

在十進制轉二進制的過程中,因js存儲位數有限制,末位就會0舍1入取近似值,從而導致再轉回十進制時產生誤差。



02

如何解決

  • 使用toPrecision;?

  • 乘以10的N次冪轉換成整數,再除以N次冪轉回小數;

  • 先加上1e-14或Number.EPSILON再取值;

  • 使用第三方庫,處理大數的 bignumber.js,處理小數的number-precision 和 decimal.js,處理JSON序列化json-bigint。

使用toPrecision

這個方法主要用于純展示。先用toPrecision保留一定位數的經度,再通過parseFloat展示。

例如:

這個12是精度默認值或者說是一個經驗值,12位一般都能解決0000...1和0000...9的問題。一般不適合浮點數的運算。


先轉整數進行運算,再轉成小數

這種方式是我之前浮點運算時經常用到的方法。我們拿0.1+0.2的運算來舉例:

但這種方法也不是萬能的,有時候也會失精:

真是防不勝防啊!這時候我們也可以使用Math.round()方法來達到我們的目的,如下:


先加上1e-14或Number.EPSILON再取值

給浮點數加上一個極小的數就可以達到目的。獲取極小的數有兩種方式:

  • 1e-14(10的-14次方)

  • ES6的極小的常量Number.EPSILON


先來看看Number.EPSILON是什么?

這兩種方式都可以,看自己的喜好啦!


第三方庫

第三方庫主要介紹以下四種:

  • bignumber.js的使用-處理大數

安裝:

引入:

使用:

官網:https://mikemcl.github.io/bignumber.js/

  • number-precision的使用-處理小數

安裝:

引入:

使用:


  • number-precision的使用-處理小數

安裝:

引入:

使用:

上面的結果是Decimal 對象,取值需要Number 或 String轉換

官網:http://mikemcl.github.io/decimal.js/


  • json-bigint的使用-處理后端的返回值

安裝:

引入:

使用:

主要是把大數據轉成字符串。其實關于這一點,如果后端經驗豐富的話,自然會給前端返回字符串,也無需前端轉換。不過呢,可能前端的技能的提升也就是從無經驗的后端開始的噢!



javascript中如何解決精度丟失問題的評論 (共 條)

分享到微博請遵守國家法律
镇宁| 广丰县| 乌苏市| 凤台县| 鹤壁市| 鲜城| 泾阳县| 靖州| 息烽县| 大姚县| 南充市| 华安县| 松江区| 莫力| 会理县| 汨罗市| 龙胜| 河北区| 遵义县| 库车县| 宣城市| 资兴市| 东丰县| 通河县| 手机| 兰西县| 庆阳市| 漠河县| 万宁市| 大同市| 烟台市| 眉山市| 运城市| 尤溪县| 托克托县| 阜平县| 工布江达县| 大邑县| 泰州市| 福鼎市| 林芝县|