Java知識一

一、BigDecimal
1.簡介

float和double類型的主要涉及目標是爲了科學計算和工程計算。然而,他們沒有提供完全精確的結果,所以不應該被用於要求精確結果的場合。但是商業計算往往要求結果精確,這時候BigDecimal就派上大用場了。

BigDecimal由任意精度的整數非標度值和32位的整數標度(scale)組成。如果爲零或正數,則標度是小數點後的位數;如果爲負數,則將該數的非標度值乘以10的負scale次冪,因此,BigDecimal表示的值是unscaledValue X 10-scale

2.用法

1)構造函數和加法運算

BigDecimal bd1 = new BigDecimal(12.2);
BigDecimal bd2 = new BigDecimal("12.2");
System.out.println(bd1);
System.out.println(bd2);
BigDecimal bd3 = bd1.add(bd2);
System.out.println(bd3+"---"+bd1);
輸出結果:

12.199999999999999289457264239899814128875732421875
12.2
24.399999999999999289457264239899814128875732421875---12.199999999999999289457264239899814128875732421875
2)用來格式化小數點

BigDecimal bd1 = new BigDecimal(12.23);
double value1 = bd1.setScale(0, BigDecimal.ROUND_HALF_UP).doubleValue();
double value2 = bd1.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
double value3 = bd1.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
double value4 = bd1.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(value1);
System.out.println(value2);
System.out.println(value3);
System.out.println(value4);
輸出結果:

12.0
12.2
12.23
12.23
即最少小數點後都有一位,最多不超過小數點後總位數。

setScale(1)表示保留一位小數,默認用四捨五入方式 
setScale(1,BigDecimal.ROUND_DOWN)直接刪除多餘的小數位,如2.35會變成2.3 
setScale(1,BigDecimal.ROUND_UP)進位處理,2.35變成2.4 
setScale(1,BigDecimal.ROUND_HALF_UP)四捨五入,2.35變成2.4
setScaler(1,BigDecimal.ROUND_HALF_DOWN)四捨五入,2.35變成2.3,如果是5則向下舍

3.總結

1)商業計算使用BigDecimal;
2)儘量使用參數類型爲String的構造函數;

3)如String一樣,每運算一次產生一個新的對象。



發佈了276 篇原創文章 · 獲贊 2 · 訪問量 48萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章