欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

前端JavaScript處理小數(shù)精度問(wèn)題的最佳實(shí)踐教程

 更新時(shí)間:2024年10月22日 08:29:30   作者:零凌林  
在JavaScript開(kāi)發(fā)過(guò)程中,小數(shù)精度問(wèn)題是一個(gè)常見(jiàn)的難題,本文介紹了兩種解決小數(shù)精度問(wèn)題的方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言:

針對(duì)于小數(shù)精度問(wèn)題,本次我們主要推薦兩種方式,一種是簡(jiǎn)單的函數(shù)封裝,一種是使用第三方庫(kù)big.js。

方法一:

自封裝函數(shù)搭配parseFloat和toFixed解決小數(shù)精度問(wèn)題,僅適用于解決一般性小數(shù)精度問(wèn)題,適用于項(xiàng)目中小數(shù)問(wèn)題比較少的項(xiàng)目。 

  /**
  * @description: 處理小數(shù)精度
  * @param {*} value 需要格式化的數(shù)字
  * @param {*} fixedNum 保留的小數(shù)位數(shù),默認(rèn)為2
  * @param {*} multiple 乘數(shù),默認(rèn)為1
  * @return {*} 
  */
  export const handleDecimalPrecision = (value, fixedNum = 2, multiple = 1) => {
    return parseFloat((value * multiple).toFixed(fixedNum))
  }

測(cè)試用例:

(傳倍數(shù)multiple 是為了展示成百分比,比如30%)

0.1 + 0.2 //0.30000000000000004
handleDecimalPrecision(0.1 + 0.2) //0.3

handleDecimalPrecision(0.1 + 0.2,1,100) //30 傳倍數(shù)multiple 是為了展示成百分比,比如30%

方法二:

使用第三方庫(kù)big.js 。適用于精度問(wèn)題比較多的項(xiàng)目,長(zhǎng)期性解決精度問(wèn)題。以下我們將展示一些常見(jiàn)的使用范圍的場(chǎng)景,其他的深冷需求可移步至官方文檔查看。

big.js特點(diǎn)

  • 簡(jiǎn)單的API
  • 比Java的BigDecimal更快、更小、更易于使用
  • 復(fù)制JavaScript數(shù)字的toExponential、toFixed和toPrecision方法
  • 可以訪(fǎng)問(wèn)的十進(jìn)制浮點(diǎn)格式存儲(chǔ)值
  • 全面的文檔和測(cè)試集
  • 沒(méi)有依賴(lài)關(guān)系,相對(duì)獨(dú)立
  • 僅使用ECMAScript 3,無(wú)兼容性問(wèn)題

安裝big.js

npm install big.js -S

引入big.js

<script>
import Big from 'big.js'
</script>

示例(以vue為例):

code:

<template>
  <div class="app-container">
    <div>小數(shù)精度</div>
    <div>未處理 : 0.1 + 0.2 = {{sum_orgin}}</div>
    <div>bigjs處理 : 0.1 + 0.2 = {{sum_bigjs}}</div>
  </div>
</template>

<script setup>
import Big from 'big.js'

const num1 = 0.1
const num2 = 0.2
const sum_orgin = num1.value + num2.value
const sum_bigjs = Big(num1.value).plus(Big(num2.value))
</script>

效果圖:

創(chuàng)建Big number數(shù)據(jù)

const num1 = Big(0.1)
或者
const num2 = new Big(0.2)

加法精度問(wèn)題處理 - plus

0.1 + 0.2 //0.30000000000000004
0.7 + 0.1 //0.7999999999999999
0.2 + 0.4 //0.6000000000000001

Big(0.1).plus(Big(0.2)) //0.3
Big(0.1).plus(Big(0.24)) //0.34

減法精度問(wèn)題 - minus

0.3 - 0.2 //0.09999999999999998
1.5 - 1.2 //0.30000000000000004

Big(0.3).minus(Big(0.2)) //0.1

乘法精度問(wèn)題 - times

19.9 * 100 //1989.9999999999998
0.8 * 3 //2.4000000000000004
35.41 * 100 //3540.9999999999995

Big(19.9).times(Big(100)) //1990

除法精度問(wèn)題 - div

0.3 / 0.1 //2.9999999999999996
0.69 / 10 //0.06899999999999999
Big(0.3).div(Big(0.1)) //3

保留小數(shù)位數(shù)(四舍五入) - round

1 / 3 //0.3333333333333333
Big(1).div(Big(3)).round(3) //0.333

big.js運(yùn)算符說(shuō)明

運(yùn)算符

說(shuō)明

abs

取絕對(duì)值

cmp

compare的縮寫(xiě),即比較函數(shù)

div

除法

eq

equal的縮寫(xiě),即相等比較

gt

大于

gte

小于等于,e表示equal

lt

小于

lte

小于等于,e表示equal

minus

減法

mod

取余

plus

加法

pow

次方

prec

按精度舍入,參數(shù)表示整體位數(shù)

round

按精度舍入,參數(shù)表示小數(shù)點(diǎn)后位數(shù)

sqrt

開(kāi)方

times

乘法

toExponential

轉(zhuǎn)化為科學(xué)計(jì)數(shù)法,參數(shù)代表精度位數(shù)

toFied

補(bǔ)全位數(shù),參數(shù)代表小數(shù)點(diǎn)后位數(shù)

toJSON/toString

轉(zhuǎn)化為字符串

toPrecision

按指定有效位數(shù)展示,參數(shù)為有效位數(shù)

toNumber

轉(zhuǎn)化為JavaScript中number類(lèi)型

valueOf

包含負(fù)號(hào)(如果為負(fù)數(shù)或者-0)的字符串

bigjs官網(wǎng)文檔 

總結(jié)

到此這篇關(guān)于前端JavaScript處理小數(shù)精度問(wèn)題的文章就介紹到這了,更多相關(guān)前端JS處理小數(shù)精度內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS判斷是否長(zhǎng)按某一鍵的方法

    JS判斷是否長(zhǎng)按某一鍵的方法

    這篇文章主要介紹了JS判斷是否長(zhǎng)按某一鍵的方法,涉及JavaScript針對(duì)鍵盤(pán)按鍵的判斷及響應(yīng)操作技巧,需要的朋友可以參考下
    2016-03-03
  • js與jquery獲取父元素,刪除子元素的兩種不同方法

    js與jquery獲取父元素,刪除子元素的兩種不同方法

    本篇文章主要是對(duì)js與jquery獲取父元素,刪除子元素的兩種不同方法進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2014-01-01
  • JavaScript獲取頁(yè)面元素的常用方法詳解

    JavaScript獲取頁(yè)面元素的常用方法詳解

    這篇文章主要介紹了JavaScript獲取頁(yè)面元素的常用方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • ppk談JavaScript style屬性

    ppk談JavaScript style屬性

    JavaScript允許你改變站點(diǎn)的CSS表示層。如果想把用戶(hù)的眼球吸引到那些你希望他們關(guān)注的頁(yè)面元素上,改變樣式是極佳的(也是很普遍的)方式。
    2008-10-10
  • 詳解BootStrap中Affix控件的使用及保持布局的美觀的方法

    詳解BootStrap中Affix控件的使用及保持布局的美觀的方法

    Affix是BootStrap中的一個(gè)很有用的控件,他能夠監(jiān)視瀏覽器的滾動(dòng)條的位置并讓你的導(dǎo)航始終都在頁(yè)面的可視區(qū)域。本文重點(diǎn)給大家介紹BootStrap中Affix控件的使用及保持布局的美觀的方法,感興趣的朋友一起看看吧
    2016-07-07
  • javascript數(shù)組遍歷的方法實(shí)例分析

    javascript數(shù)組遍歷的方法實(shí)例分析

    這篇文章主要介紹了javascript數(shù)組遍歷的方法,結(jié)合實(shí)例形式分析了javascript數(shù)組遍歷及相關(guān)的some、every、filter、map等方法的使用技巧,需要的朋友可以參考下
    2016-09-09
  • 微信小程序canvas截取任意形狀的實(shí)現(xiàn)代碼

    微信小程序canvas截取任意形狀的實(shí)現(xiàn)代碼

    這篇文章主要介紹了微信小程序canvas截取任意形狀的實(shí)現(xiàn)代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 實(shí)例講解js驗(yàn)證表單項(xiàng)是否為空的方法

    實(shí)例講解js驗(yàn)證表單項(xiàng)是否為空的方法

    這篇文章主要以實(shí)例方式向大家講解了js驗(yàn)證表單項(xiàng)是否為空的方法,感興趣的朋友可以參考一下
    2016-01-01
  • JavaScript數(shù)組扁平轉(zhuǎn)樹(shù)形結(jié)構(gòu)數(shù)據(jù)(Tree)的實(shí)現(xiàn)

    JavaScript數(shù)組扁平轉(zhuǎn)樹(shù)形結(jié)構(gòu)數(shù)據(jù)(Tree)的實(shí)現(xiàn)

    本文主要介紹了JavaScript數(shù)組扁平轉(zhuǎn)樹(shù)形結(jié)構(gòu)數(shù)據(jù)(Tree)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • webpack常用構(gòu)建優(yōu)化策略小結(jié)

    webpack常用構(gòu)建優(yōu)化策略小結(jié)

    這篇文章主要介紹了webpack常用構(gòu)建優(yōu)化策略小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11

最新評(píng)論