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

關(guān)于bigDecimal類的精度保留方法

 更新時間:2023年07月04日 10:33:28   作者:weixin_39923623  
這篇文章主要介紹了關(guān)于bigDecimal類的精度保留方法,計算機存儲的浮點數(shù)受存儲bit位數(shù)影響,只能保證一定范圍內(nèi)精準,超過bit范圍的只能取近似值,Java使用java.math.BigDecimal專門處理小數(shù)精度,需要的朋友可以參考下

一、計算機的小數(shù)計算

計算機的小數(shù)計算一定范圍內(nèi)精確,超過范圍只能取近似值:

計算機存儲的浮點數(shù)受存儲bit位數(shù)影響,只能保證一定范圍內(nèi)精準,超過bit范圍的只能取近似值。

java中各類型的精度范圍參見:關(guān)于java中基本數(shù)據(jù)類型的數(shù)值范圍

編程時注意:

doulbe類型的數(shù),不能用等號判定是否相等(或者是一定范圍內(nèi)可以)。因為兩次同樣的計算(除法)結(jié)果可能出現(xiàn)小數(shù)部分不同。甚至極端的時候,初始化兩個小數(shù)時,都可能不相等(用數(shù)值和字符串分別初始化bigdecimal的小數(shù)就會不等)

java小數(shù)處理方法的經(jīng)驗總結(jié):

(1)小數(shù)計算對精度無要求時,使用float節(jié)省時間。

(2)如果有精度要求,用BigDecimal類處理(初始化必須使用字符串,因為用數(shù)值初始化會得到近似值,不準確),然后設(shè)置保留位數(shù)和 舍入法(half_up四舍五入,half_even銀行家,half_down向下取整)

(3)精度要求低時可轉(zhuǎn)化為整數(shù)處理(集體統(tǒng)一擴大數(shù)量級):

乘以10的級數(shù)轉(zhuǎn)化為整數(shù)處理,小數(shù)點右移幾位,但整數(shù)值不要超過對應(yīng)類型的取值范圍。比如保留4位小數(shù),可統(tǒng)一乘以10000,然后只保留整數(shù)計算結(jié)果,保留近位的話就多乘一位。

這種方式在RTB項目MDSP的算法核心模塊中使用,幾十萬的投放量,用int或long就可以處理,更大范圍的整數(shù)處理BigInteger。

這樣的好處是:

a,計算快,除了除法,其他運算上整數(shù)計算(加減乘)節(jié)省時間;

b,除法中,小數(shù)部分可直接省略,或向上取整(小數(shù)大于0時則加1)也可以讓小數(shù)點多移動一位來保留進位。

二、java專門的小數(shù)運算類:

BigDecimal類型(比double和float小數(shù)運算更精準的小數(shù)計算)

float和double只能用來做科學計算或者是工程計算,在廣域數(shù)值范圍上提供較為精確的快速近似計算;而在商業(yè)計算要求結(jié)果精確(比如,有的編程語言中提供了專門的貨幣類型來處理),所以Java使用java.math.BigDecimal專門處理小數(shù)精度

構(gòu)造器描述:

BigDecimal(int) 創(chuàng)建一個具有參數(shù)所指定整數(shù)值的對象。

BigDecimal(double) 創(chuàng)建一個具有參數(shù)所指定雙精度值的對象。

BigDecimal(long) 創(chuàng)建一個具有參數(shù)所指定長整數(shù)值的對象。

BigDecimal(String) 創(chuàng)建一個具有參數(shù)所指定以字符串表示的數(shù)值的對象。

使用原則:初始化小數(shù)必須用String來夠造,BigDecimal(String),因為用double的小數(shù)是近似值,不是精確值。

BigDecimal成員方法

add(BigDecimal) 對象自身與參數(shù)相加,然后返回這個對象。

subtract(BigDecimal) 對象自身與參數(shù)相減,然后返回這個對象。

multiply(BigDecimal) 對象自身與參數(shù)相乘,然后返回這個對象。

divide(BigDecimal) 對象自身與參數(shù)相除,然后返回這個對象。

toString() BigDecimal對象的數(shù)值轉(zhuǎn)換成對應(yīng)的字符串。

doubleValue() BigDecimal對返回double值。

floatValue() BigDecimal對返回float。

longValue() BigDecimal對返回long值。

intValue() BigDecimal對返回int值。

三、java小數(shù)保留精度的舍入方式

1,java 常用的四舍五入法實現(xiàn):

Math類中的round方法不能設(shè)置保留幾位小數(shù),但可以乘100達到保留2位的目的:

Math.round(value*100)/100.0;

或者,直接用java.text.DecimalFormat指定保留幾位小數(shù),用哪幾種舍入法:

DecimalFormat decFormat = new DecimalFormat("#.00");
decFormat.setRoundingMode(RoundingMode.HALF_UP);

2,java的8種舍入方式:

1、 ROUND_UP:向上取整(丟掉小數(shù),整數(shù)加1) 遠離零方向舍入。向絕對值最大的方向舍入,只要舍棄位非0即進位。

2、ROUND_DOWN:向下取整(丟掉小數(shù))。趨向零方向舍入。向絕對值最小的方向輸入,所有的位都要舍棄,不存在進位情況。

3、ROUND_CEILING:向正無窮方向走,始終不會減少計算值。如果 BigDecimal 為正,則舍入行為與 ROUND_UP 相同;如果為負,則舍入行為與 ROUND_DOWN 相同。Math.round()方法就是使用的此模式。

4、ROUND_FLOOR:向負無窮方向舍入。向負無窮方向靠攏。若是正數(shù),舍入行為類似于ROUND_DOWN;若為負數(shù),舍入行為類似于ROUND_UP。

5、 HALF_UP:四舍五入,最近數(shù)字舍入(5進)。

6、 HALF_DOWN:四舍六入,最近數(shù)字舍入(5舍)。

7、 HAIL_EVEN:銀行家舍入法。四舍六入五偶舍。即舍棄位4舍6入,當為5時看前一位,奇進偶舍。向“最接近的”數(shù)字舍入,如果與兩個相鄰數(shù)字的距離相等,則向相鄰的偶數(shù)舍入。

也就是說,如果舍棄部分左邊的數(shù)字為奇數(shù),則舍入行為與 ROUND_HALF_UP 相同; 如果為偶數(shù),則舍入行為與 ROUND_HALF_DOWN 相同。

注意,在重復進行一系列計算時,此舍入模式可以將累加錯誤減到最小。

8、ROUND_UNNECESSARY 斷言請求的操作具有精確的結(jié)果,因此不需要舍入。如果對獲得精確結(jié)果的操作指定此舍入模式,則拋出ArithmeticException。

到此這篇關(guān)于關(guān)于bigDecimal類的精度保留方法的文章就介紹到這了,更多相關(guān)bigDecimal精度保留內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中使用異或語句實現(xiàn)兩個變量的互換

    Java中使用異或語句實現(xiàn)兩個變量的互換

    這篇文章主要介紹了Java中使用異或語句實現(xiàn)兩個變量的互換,本文直接給出代碼實例以及運行結(jié)果,需要的朋友可以參考下
    2015-06-06
  • SparkSQl簡介及運行原理

    SparkSQl簡介及運行原理

    Spark SQL就是將SQL轉(zhuǎn)換成一個任務(wù),提交到集群上運行,類似于Hive的執(zhí)行方式。今天通過本文給大家分享SparkSQl簡介及運行原理,感興趣的朋友跟隨小編一起看看吧
    2021-08-08
  • 淺談java封裝

    淺談java封裝

    封裝封裝就是將屬性私有化,提供公有的方法訪問私有的屬性。*實現(xiàn)封裝的步驟:(1)修改屬性的可見性來限制對屬性的訪問。(2)為每個屬性創(chuàng)建一對賦值方法和取值方法,用于對這些屬性的訪問。(3)在賦值和取值方法中,加入對屬性的存取限制。
    2015-03-03
  • Spring?Boot和Vue前后端分離項目架構(gòu)的全過程

    Spring?Boot和Vue前后端分離項目架構(gòu)的全過程

    前后端分離是目前互聯(lián)網(wǎng)開發(fā)中比較廣泛使用的開發(fā)模式,主要是將前端和后端的項目業(yè)務(wù)進行分離,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot和Vue前后端分離項目架構(gòu)的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • java中的構(gòu)造函數(shù)什么時候被調(diào)用執(zhí)行

    java中的構(gòu)造函數(shù)什么時候被調(diào)用執(zhí)行

    這篇文章主要介紹了java中的構(gòu)造函數(shù)什么時候被調(diào)用執(zhí)行問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Java Convert Kotlin空指針異常的解決方法

    Java Convert Kotlin空指針異常的解決方法

    本文主要介紹了Java?Convert?Kotlin空指針異常的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • JavaWeb利用struts實現(xiàn)文件下載時改變文件名稱

    JavaWeb利用struts實現(xiàn)文件下載時改變文件名稱

    這篇文章主要為大家詳細介紹了JavaWeb利用struts實現(xiàn)文件下載時改變文件名稱的相關(guān)資料,需要的朋友可以參考下
    2016-06-06
  • Java 實現(xiàn)棧的三種方式

    Java 實現(xiàn)棧的三種方式

    這篇文章主要介紹了棧:LIFO(后進先出),自己實現(xiàn)一個棧,要求這個棧具有push()、pop()(返回棧頂元素并出棧)、peek() (返回棧頂元素不出棧)、isEmpty()這些基本的方法,需要的朋友可以參考下
    2020-12-12
  • SpringBoot如何讀取配置文件參數(shù)并全局使用

    SpringBoot如何讀取配置文件參數(shù)并全局使用

    這篇文章主要介紹了SpringBoot如何讀取配置文件參數(shù)并全局使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • java中的內(nèi)存溢出方式

    java中的內(nèi)存溢出方式

    文章介紹了如何使用jmap和IBMHeapAnalyzer等工具分析OutOfMemoryError: Compressedclassspace錯誤,發(fā)現(xiàn)問題出在/org/pf4j/PluginClassLoader加載了大量類
    2024-12-12

最新評論