亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何使用big.js解決JavaScript浮點數精度丟失問題

 更新時間:2023年12月21日 11:25:17   作者:小綿楊Yancy  
最近在項目中涉及到金額從元轉為分(乘100即可),發(fā)現乘法居然也會有精度丟失的問題,關于浮點數計算精度丟失是很多語言都存在的問題,本文給大家分享使用big.js解決JavaScript浮點數精度丟失問題,感興趣的朋友一起看看吧

一、精度丟失

關于浮點數計算精度丟失是很多語言都存在的問題,例如比較著名的:

0.1 + 0.2 === 0.30000000000000004

最近在項目中涉及到金額從元轉為分(乘100即可),發(fā)現乘法居然也會有精度丟失的問題:

19.9 * 100 === 1989.9999999999998

因為涉及到了金額,所以一定不能出現這樣的問題??梢灾苯邮褂?

Number(Number(19.9 * 100).toFixed()) === 1990

但其實toFixed()方法也會造成的精度丟失,后來發(fā)現,有一個專門處理js精度問題的庫:http://mikemcl.github.io/big.js/

二、Big.js

安裝:

npm install big.js

項目中引入:

import Big from 'big.js';

使用Big構造函數可以創(chuàng)建一個Big對象,調用對應的方法即可實現我們的計算需求。

let x = new Big(0.1)

在這里插入圖片描述

注意最后我們需要使用toNumber方法重新將Big對象轉為數字。

2.1 加

Big對象上的plus方法實現加運算。

0.1 + 0.2                  // 0.30000000000000004
x = new Big(0.1)
y = x.plus(0.2).toNumber()            // 0.3
Big(0.7).plus(x).plus(y).toNumber()   // 1.1

2.2 減

Big對象上的minus方法實現減運算。

0.3 - 0.1                  // 0.19999999999999998
x = new Big(0.3)
x.minus(0.1).toNumber()               // 0.2

2.3 乘

Big對象上的times方法實現乘運算。

0.6 * 3                    // 1.7999999999999998
x = new Big(0.6)
y = x.times(3).toNumber()             // 1.8
Big('7e+500').times(y).toNumber()     // Infinity
Big('7e+500').times(1.8).toString()   // '1.26e+501'

2.4 除

Big對象上的div方法實現除運算。

x = new Big(355)
y = new Big(113)
x.div(y).toNumber()                   // 3.14159292035398230088
Big.DP = 2
x.div(y).toNumber()                   // 3.14
x.div(5).toNumber()                   // 71

DP:涉及除法的操作結果的最大小數位數。它僅與 div 和 sqrt 方法相關,以及當指數為負時與 pow 方法相關。

2.5 指數

Big對象上的pow方法實現指數運算。

Math.pow(0.7, 2)           // 0.48999999999999994
x = new Big(0.7)
x.pow(2)                   // '0.49'
Big.DP = 20
Big(3).pow(-2)             // '0.11111111111111111111'
new Big(123.456).pow(1000).toString().length     // 5099
new Big(2).pow(1e+6)       // Time taken (Node.js): 9 minutes 34 secs.

到此這篇關于如何使用big.js解決JavaScript浮點數精度丟失問題的文章就介紹到這了,更多相關js浮點數精度丟失內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 小程序websocket心跳庫(websocket-heartbeat-miniprogram)

    小程序websocket心跳庫(websocket-heartbeat-miniprogram)

    這篇文章主要介紹了小程序websocket心跳庫(websocket-heartbeat-miniprogram),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • js實現上傳圖片功能

    js實現上傳圖片功能

    這篇文章主要為大家詳細介紹了js實現上傳圖片功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • JavaScript代碼里的判斷小結

    JavaScript代碼里的判斷小結

    在JavaScript代碼中,多多少少會有判斷語句。業(yè)務越復雜,邏輯就越復雜,判斷就越多。今天給大家整理下JavaScript中代碼里常會用到的那些判斷,有需要的可以參考借鑒。
    2016-08-08
  • javascript修改圖片src的方法

    javascript修改圖片src的方法

    這篇文章主要介紹了javascript修改圖片src的方法,通過簡單的圖片src獲取與賦值來實現修改src的功能,需要的朋友可以參考下
    2015-01-01
  • js強制把網址設為默認首頁

    js強制把網址設為默認首頁

    有時候你會發(fā)現設首頁為失效,那么來一個js強制設置首頁的代碼,不過為了綠色上網,盡量不要強迫你的用戶意志,弄不好網站用戶體驗會降低。感興趣的小伙伴可以參考一下
    2015-09-09
  • JavaScript中${pageContext.request.contextPath}取值問題及解決方案

    JavaScript中${pageContext.request.contextPath}取值問題及解決方案

    這篇文章主要介紹了JavaScript中${pageContext.request.contextPath}取值問題及解決方案的相關資料,需要的朋友可以參考下
    2016-12-12
  • js Calender控件使用詳解

    js Calender控件使用詳解

    這篇文章主要介紹了js Calender控件使用詳解,需要的朋友可以參考下
    2015-01-01
  • 如何用JS實現網頁瀑布流布局

    如何用JS實現網頁瀑布流布局

    這篇文章主要介紹了如何用JS實現網頁瀑布流布局,幫助大家更好的利用JavaScript制作網頁,感興趣的朋友可以了解下
    2021-04-04
  • 高性能JavaScript模板引擎實現原理詳解

    高性能JavaScript模板引擎實現原理詳解

    這篇文章主要介紹了JavaScript模板引擎實現原理詳解,本文著重講解artTemplate模板的實現原理,它采用預編譯方式讓性能有了質的飛躍,是其它知名模板引擎的25、32 倍,需要的朋友可以參考下
    2015-02-02
  • JavaScript分析、壓縮工具JavaScript Analyser

    JavaScript分析、壓縮工具JavaScript Analyser

    這篇文章主要介紹了JavaScript分析、壓縮工具JavaScript Analyser,需要的朋友可以參考下
    2014-12-12

最新評論