最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

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

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

分享到微博請遵守國家法律
德令哈市| 望城县| 海盐县| 江华| 德昌县| 卓资县| 江达县| 黎城县| 宣化县| 襄垣县| 崇明县| 和平区| 陆良县| 湖北省| 波密县| 耿马| 广水市| 泗水县| 新安县| 康马县| 鄂伦春自治旗| 油尖旺区| 西丰县| 天镇县| 修武县| 天津市| 建平县| 邹平县| 葫芦岛市| 静海县| 宝坻区| 盐亭县| 通辽市| 安陆市| 诏安县| 右玉县| 富平县| 南平市| 收藏| 曲阜市| 华池县|