好程式設計師Java培訓分享BigDecimal的用法

好程式設計師發表於2020-07-30

  好程式設計師Java 培訓分享 BigDecimal 的用法, 如果對數值結果精度要求很高,那麼就可以使用BigDecimal BigDecimal 可以精準的控制小數點後面的數字

   1. 例項 BigDecimal 物件

   通常會使用 String int 構造方法例項出 BigDecimal 物件,即

   new BigDecimal(String val);

   new BigDecimal(int val);

   如引數為 double 型別,得先轉換成 String 型別再入參

   new BigDecimal(Double.toString(123.123));

   2. BigDecimal 加減乘除

   加減乘除都是用 BigDecimal 物件點 (.) 加減乘除方法入參 BigDecimal 物件,返回的也是 BigDecimal 物件

   加:BigDecimal add = new BigDecimal("123.123").add(new BigDecimal("123.123")); ---> 246.246

   減:BigDecimal subtract = new BigDecimal("123.123").subtract(new BigDecimal("123.123")); ---> 0.000

   乘:BigDecimal multiply = new BigDecimal("123.123").multiply(new BigDecimal("123.123")); ---> 15159.273129

   除:BigDecimal divide = new BigDecimal("123.123").divide(new BigDecimal("123.123")); ---> 1

   注:其中除法一般不會這樣直接除,在不能整除的情況下,這樣執行程式是會報錯的,所以一般除法會使用下面這個過載方法

   new BigDecimal("10").divide("40",1,ROUND_HALF_UP); ---> 0.3

   正常計算 10/40 結果為 0.25 , 在這裡是計算 十除以四十,保留一位小數,四捨五入模式。所以得到的結果為 0.3

   最常用的模式:

   ROUND_HALF_UP :四捨五入

   ROUND_HALF_DOWN :向下取捨 ( 去掉保留小數位後面的小數 )

   3. Scale 屬性操作

   ① 獲取小數的位數: new BigDecimal("123.123").scale() ---> 3

   setScale() 方法保留幾位小數

   - setScale(int NewScale) ( 注:入參的數字只能大於等於小數的位數,括號中只能入參大於等於 3 的數 )

   例: new BigDecimal("123.123").setScale(3) ---> 123.123

   new BigDecimal("123.123").setScale(5) ---> 123.12300

   - setScale(int newScale, RoundingMode roundingMode)

   例:new BigDecimal("123.123").setScale(2,RoundingMode.HALF_UP) ---> 123.12

   new BigDecimal("123.125").setScale(2,RoundingMode.HALF_UP) ---> 123.13

   new BigDecimal("123.123").setScale(2,RoundingMode.HALF_DOWN) ---> 123.12

   new BigDecimal("123.125").setScale(2,RoundingMode.HALF_DOWN) ---> 123.12

   4. compareTo 比較大小

   等於:new BigDecimal("123.123").compareTo(new BigDecimal("123.123"))==0 ---> true

   new BigDecimal("123.123").compareTo(new BigDecimal("123.123")) ---> 0

   如果 compareTo 的結果為 0 的話,就證明兩個物件相等 ( 當左邊不等於右邊時,第一個表示式則為 false)

   小於:new BigDecimal("123.122").compareTo(new BigDecimal("123.123")) < 0 ---> true

   new BigDecimal("123.122").compareTo(new BigDecimal("123.123")) ---> -1

   如果 compareTo 的結果為 -1 的話,就證明左邊小於右邊 ( 當左邊大於等於右邊時,第一個表示式則為 false)

   大於:new BigDecimal("123.124").compareTo(new BigDecimal("123.123")) > 0 ---> true

   new BigDecimal("123.124").compareTo(new BigDecimal("123.123")) ---> 1

   如果 compareTo 的結果為 1 的話,就證明左邊大於右邊 ( 當左邊小於等於右邊時,第一個表示式則為 false)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2708094/,如需轉載,請註明出處,否則將追究法律責任。

相關文章