国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

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

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中如何解決精度丟失問題的評論 (共 條)

分享到微博請遵守國家法律
乡宁县| 岳西县| 成都市| 隆林| 沂水县| 南陵县| 海门市| 庆元县| 丰镇市| 仙居县| 怀安县| 通榆县| 平度市| 孙吴县| 和硕县| 漾濞| 澳门| 嘉黎县| 绍兴市| 延庆县| 五原县| 孟州市| 湘阴县| 双牌县| 新邵县| 孟津县| 景德镇市| 鄂伦春自治旗| 榕江县| 吉隆县| 庄河市| 海原县| 西藏| 额济纳旗| 肥西县| 仁化县| 金溪县| 炉霍县| 汤阴县| 长春市| 孟连|