国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

前端計算數(shù)字精度丟失問題解決方法記錄

這篇具有很好參考價值的文章主要介紹了前端計算數(shù)字精度丟失問題解決方法記錄。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在日常一些需求中,總會遇到一些需要前端進行手動計算的場景,那么這里需要優(yōu)先考慮的則是數(shù)字精度問題!具體請看下面截圖

如圖所示,在JavaScript進行浮點型數(shù)據(jù)計算當中,會出現(xiàn)計算結(jié)果“不正確”的現(xiàn)象。

我們知道浮點型數(shù)據(jù)類型主要有:單精度float、雙精度double。

浮點型簡單來說就是表示帶有小數(shù)的數(shù)據(jù),而恰恰小數(shù)點可以在相應(yīng)的二進制的不同位置浮動,可能是因為這樣就被定義成浮點型了。(不得不佩服這文化程度,定義個數(shù)據(jù)名稱都這么有深度~)

但是?。?!

JavaScript 存儲小數(shù)和其它語言如 Java 和 Python 都不同,JavaScript 中所有數(shù)字包括整數(shù)和小數(shù)都只有一種類型 即 Number類型 它的實現(xiàn)遵循 IEEE 754 標準,IEEE 754 標準的內(nèi)容都有什么,這個咱不用管,我們只需要記住以下一點:

javascript以64位雙精度浮點數(shù)存儲所有Number類型值,即計算機最多存儲64位二進制數(shù)。

對于double型數(shù)據(jù)(雙精度浮點數(shù)),其長度是8個字節(jié)(大小),右邊52位用來表示小數(shù)點后面的數(shù)字,中間11位表示e(exponent)小數(shù)點移動的位數(shù),左邊一位用來表示正負。如圖所示:

只要知道了這一點,那我們就可以對癥下藥(解決問題):

解決方案 ①

Number(parseFloat(20.24*100).toPrecision(16))


存儲二進制時小數(shù)點的偏移量最大為52位,最多可表示的十進制為9007199254740992,對應(yīng)科學(xué)計數(shù)尾數(shù)是 9.007199254740992,這也是 JavaScript 最多能表示的精度。它的長度是 16,所以可以使用 toPrecision(16) 來做精度運算。

通過先轉(zhuǎn)為浮點型計算,然后做精度運算后再轉(zhuǎn)為Number類型即可。

解決方案 ②

通過引入number-precision進行計算,步驟如下:

  • Install
npm install number-precision --save


  • Methods
NP.strip(num)         // strip a number to nearest right number
NP.plus(num1, num2, num3, ...)   // addition, num + num2 + num3, two numbers is required at least.
NP.minus(num1, num2, num3, ...)  // subtraction, num1 - num2 - num3
NP.times(num1, num2, num3, ...)  // multiplication, num1 * num2 * num3
NP.divide(num1, num2, num3, ...) // division, num1 / num2 / num3
NP.round(num, ratio)  // round a number based on ratio


  • Usage
import NP from 'number-precision'
NP.strip(0.09999999999999998); // = 0.1
NP.plus(0.1, 0.2);             // = 0.3, not 0.30000000000000004
NP.minus(1.0, 0.9);            // = 0.1, not 0.09999999999999998
NP.times(3, 0.3);              // = 0.9, not 0.8999999999999999
NP.divide(1.21, 1.1);          // = 1.1, not 1.0999999999999999
NP.round(0.105, 2);            // = 0.11, not 0.1


更多解決方案敬請關(guān)注后續(xù)更新,希望對您有幫助~

作者:京東零售?黃宏峰

來源:京東云開發(fā)者社區(qū) 轉(zhuǎn)載請注明來源文章來源地址http://www.zghlxwxcb.cn/news/detail-746052.html

到了這里,關(guān)于前端計算數(shù)字精度丟失問題解決方法記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • SpringBoot返回前端Long類型字段丟失精度問題及解決方案

    Java服務(wù)端返回Long整型數(shù)據(jù)給前端,JS會自動轉(zhuǎn)換為Number類型。而Long類型能表示的最大值為(),當數(shù)值超過JS中Number類型的最大值()時,就會丟失精度。 首先,引入依賴。 新建一個自定義大數(shù)據(jù)序列化類,如下: 新建Jackson配置類 本文針對Java服務(wù)端返回Long整型數(shù)據(jù)給前端時

    2024年03月22日
    瀏覽(305)
  • Java中整數(shù)相除并保留兩位小數(shù)的實現(xiàn)方式、保留兩位小數(shù):Java中整數(shù)相除的處理方法、解決Java整數(shù)相除后精度丟失的問題、Java數(shù)值計算:整數(shù)相除保留指定小數(shù)位數(shù)的技巧

    當在Java中需要進行整數(shù)相除并保留兩位小數(shù)時,可以使用以下兩種方式實現(xiàn): 1. 使用浮點數(shù)類型和DecimalFormat進行格式化: ?2. 使用BigDecimal類進行精確的數(shù)值計算和格式化輸出: 在選擇使用哪種方式時,需要根據(jù)具體的業(yè)務(wù)需求和數(shù)值計算的精度要求進行權(quán)衡和選擇。如果

    2024年02月12日
    瀏覽(26)
  • 后端Long類型傳到前端精度丟失的問題

    后端Long類型傳到前端精度丟失的問題

    問題出現(xiàn):后端的Java Bean的id屬性是用的Long類型對應(yīng)數(shù)據(jù)庫主鍵使用bigint類型,當使用JSON方式傳遞該數(shù)據(jù)給前端時,前端接收到的數(shù)據(jù)末尾會變成0。(發(fā)生的精度丟失問題) 問題原因:Java中的long能表示的范圍比js中number大,也就意味著部分數(shù)值在js中存不下(變成不準確的值

    2024年02月16日
    瀏覽(100)
  • 后端傳long類型數(shù)據(jù)到前端精度丟失問題

    在 Spring Boot 中,將 long 類型傳輸?shù)角岸藭r,會發(fā)現(xiàn)該類型的值可能會出現(xiàn)精度丟失的問題。 這是因為在 JavaScript 中,數(shù)字類型默認會被轉(zhuǎn)換為雙精度浮點數(shù),而雙精度浮點數(shù)的精度有限,只能精確表示 2 的 53 次方以內(nèi)(即 Number.MAX_SAFE_INTEGER,約為 9 x 10^15)的整數(shù)。對于超過

    2024年02月15日
    瀏覽(93)
  • 前端接收后端數(shù)據(jù)時,遇到精度丟失的問題

    之前項目開發(fā)過程中遇到過前端接收后端數(shù)據(jù)時,遇到精度丟失的問題。當時進行了問題記錄,本篇博客針對于這個問題進行問題原因并進行多種方式解決這個問題。 前端接收后端返回的數(shù)據(jù)時出現(xiàn)精度丟失問題,通常是因為在數(shù)據(jù)傳輸過程中,數(shù)據(jù)類型被轉(zhuǎn)換為了 JavaScr

    2024年02月02日
    瀏覽(97)
  • js浮點數(shù)四則運算精度丟失以及toFixed()精度丟失解決方法

    js浮點數(shù)四則運算精度丟失以及toFixed()精度丟失解決方法

    1、四則運算精度丟失: 2、toFixed() 四舍五入精度丟失: js采用64位浮點數(shù)表示法(幾乎所有現(xiàn)代編程語言所采用),這是一種二進制表示法。二進制浮點數(shù)表示法并不能精確表示類似 0.1 這樣簡單的數(shù)字。 這個問題不只在js中才會出現(xiàn),在任何使用二進制浮點數(shù)的編程語言中

    2024年02月05日
    瀏覽(26)
  • python的csv庫:保存數(shù)字僅有15位,精度丟失的解決辦法

    python的csv庫:保存數(shù)字僅有15位,精度丟失的解決辦法

    廢話不多說, ????????如果在字符串后添加制表符 ‘/t’ 能夠解決問題,那么這確實是一個有效的解決方案。制表符 ‘/t’ 在CSV文件中可以被視為分隔符,確保數(shù)據(jù)不會被自動格式化或截斷。 生成的表格: 設(shè)置單元格分類位‘數(shù)值’表示: 可以看到20位數(shù)字+‘/t’被不

    2024年02月11日
    瀏覽(12)
  • 完美解決!處理精度丟失問題點

    完美解決!處理精度丟失問題點

    目錄 1. 解決后端響應(yīng)數(shù)據(jù)給前端出現(xiàn)精度丟失問題 2. Freemark BigDecimal數(shù)據(jù)顯示精度丟失問題 3. 前端調(diào)用方法傳值精度丟失問題 解決方式一: 在項目中都是將注解標注在對應(yīng)字段上,在Json序列化的時候把Long自動轉(zhuǎn)為String。? 解決方式二: 全局配置?每個實體類的id字段都需要

    2024年02月15日
    瀏覽(101)
  • 前端處理后端傳來的Long型數(shù)據(jù)精度丟失的問題--對象轉(zhuǎn)換器Jackson0bjectMapper

    1、問題描述 前端提交參數(shù) 后端處理 前端js對long型數(shù)據(jù)進行處理時丟失精度(只能保證16位),導(dǎo)致提交的id和數(shù)據(jù)庫中的id不一致。 2、 問題實現(xiàn) 如何解決這個問題? 我們可以在服務(wù)端給頁面響應(yīng)json數(shù)據(jù)時進行處理,將long型數(shù)據(jù)統(tǒng)一轉(zhuǎn)為String字符串 3、具體代碼實現(xiàn)–對象

    2024年02月16日
    瀏覽(365)
  • Es 通過javaApi上傳數(shù)據(jù)Long類型丟失精度的問題一次性解決

    通過 updateRequest.docAsUpsert(true) true 表示無匹配_id是插入數(shù)據(jù),false 表示無匹配_id會拋出異常

    2024年02月15日
    瀏覽(93)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包