java.math.BigDecimal類提供用於算術,刻度操作,舍入,比較,哈希算法和格式轉換操作。
toString()方法提供BigDecimal的規范表示。它使用戶可以完全控制舍入行為。
提供用於操作BigDecimal規模兩種類型的操作:
- 縮放/舍入操作
- 小數點移動操作。
此類及其迭代器實現Comparable接口的所有可選方法。
一、類的詳解
類聲明
|
1
2
|
public
class
BigDecimal
extends
Number
implements
Comparable<bigdecimal>
</bigdecimal>
|
字段域
以下是java.math.BigDecimal類中的字段:
-
static BigDecimal ONE-- 值為1,使用刻度為0。
-
static BigDecimal TEN--值為10,使用刻度為0。
-
static BigDecimal ZERO--值為0,使用刻度為0。
-
static int ROUND_CEILING-- 舍入模式舍向正無窮。正數效果同ROUND_UP舉例如:1.239得到的是1.24;負數效果舉例如:-1.239得到的是-1.23
-
static int ROUND_DOWN-- 舍入模式,向零舍入(即舍棄后邊所有,不向前進1)。
-
static int ROUND_FLOOR-- 舍入模式接近負無窮大。正數效果同ROUND_DOWN舉例如:1.239得到的是1.23;負數效果舉例如:-1.239得到的是-1.23
-
static int ROUND_HALF_DOWN-- 遵循四舍五入規則,大於5向前一位進1。
-
static int ROUND_HALF_EVEN-- 舍入模式舍對“近鄰”如果與兩個相鄰數字的距離相等,在這種情況下,舍入向着更加相鄰(正負數都是向着0相鄰舍入)。
-
static int ROUND_HALF_UP-- 遵循四舍五入規則,大於等於5向前一位進1。
-
static int ROUND_UNNECESSARY-- 舍入模式斷言請求的操作具有精確的結果,因此不需要舍入。用於獲取運算結果。
- static int ROUND_UP--舍入模式,舍入去零,零不舍入。
類構造函數
| S.N. | 構造函數 & 描述 |
|---|---|
| 1 | BigDecimal(BigInteger val) 這個構造函數是用來將BigInteger轉換為BigDecimal。 |
| 2 | BigDecimal(BigInteger unscaledVal, int scale) 這個構造函數用於轉換為BigInteger非標度值和一個int尺度成一個BigDecimal。 |
| 3 | BigDecimal(BigInteger unscaledVal, int scale, MathContext mc) 這個構造函數用於轉換為BigInteger非標度值和一個int尺度轉換為BigDecimal,有根據上下文設置進行舍入。 |
| 4 | BigDecimal(BigInteger val, MathContext mc) 此構造函數用於根據上下文設置將BigInteger轉換為BigDecimal舍入。 |
| 5 | BigDecimal(char[ ] in) 此構造函數用於將BigDecimal字符數組表示轉化為BigDecimal,接受相同的字符序列與BigDecimal(String)構造函數。 |
| 6 | BigDecimal(char[ ] in, int offset, int len) 此構造函數用於將BigDecimal的字符數組表示轉化為BigDecimal,接受字符與BigDecimal(String)構造方法相同的字符序列,同時允許指定子數組。 |
| 7 | BigDecimal(char[ ] in, int offset, int len, MathContext mc) 此構造函數用於將BigDecimal的字符數組表示轉化為BigDecimal,接受字符與BigDecimal(String)構造方法相同的字符序列,同時允許指定子數組,並與根據上下文設置進行舍入。 |
| 8 | BigDecimal(char[ ] in, MathContext mc) 此構造函數用於將BigDecimal的字符數組表示轉化為BigDecimal,接受相同的字符序列與BigDecimal(String)構造和根據上下文設置進行舍入。 |
| 9 | BigDecimal(double val) 這個構造函數是用來轉換double為一個BigDecimal,它是雙的二進制浮點值的精確十進制表示。 |
| 10 | BigDecimal(double val, MathContext mc) 這個構造函數是用來轉換double為一個BigDecimal,有根據上下文設置進行舍入。 |
| 11 | BigDecimal(int val) 這個構造函數是用來轉換一個int轉換為BigDecimal。 |
| 12 | BigDecimal(int val, MathContext mc) 這個構造函數是用來轉換一個int轉換為BigDecimal,有根據上下文設置進行舍入。 |
| 13 | BigDecimal(long val) 這個構造函數用於轉換long為一個BigDecimal。 |
| 14 | BigDecimal(long val, MathContext mc) 這個構造函數是將BigInteger轉換為BigDecimal。 |
| 15 | BigDecimal(String val) 此構造函數用於一個BigDecimal的字符串表示形式轉換為BigDecimal。 |
| 16 | BigDecimal(String val, MathContext mc) 此構造函數用於將BigDecimal的字符串表示形式轉換為BigDecimal,接受相同的字符串作為與BigDecimal(String)構造,並根據上下文設置進行舍入。 |
類方法
| S.N. | 方法 & 描述 |
|---|---|
| 1 | BigDecimal abs() 此方法返回一個BigDecimal,其值是此BigDecimal的絕對值,其標度是this.scale()。 |
| 2 | BigDecimal abs(MathContext mc) 此方法返回一個BigDecimal,其值是此BigDecimal的絕對值,與根據上下文設置進行舍入。 |
| 3 | BigDecimal add(BigDecimal augend) 此方法返回一個BigDecimal,其值為(this + augend),其標度為max(this.scale(), augend.scale())。 |
| 4 | BigDecimal add(BigDecimal augend, MathContext mc) 此方法返回一個BigDecimal,其值為(this + augend),與根據上下文設置進行舍入。 |
| 5 | byte byteValueExact() 這種方法的BigDecimal轉換為一個字節,檢查丟失的信息。 |
| 6 | int compareTo(BigDecimal val) 這種方法比較BigDecimal與指定的BigDecimal。 |
| 7 | BigDecimal pide(BigDecimal pisor) 此方法返回一個BigDecimal,其值為(this/除數),且其首選標度為(this.scale() - pisor.scale());如果准確的商不能表示(因為它有無窮的十進制擴展),則拋出ArithmeticException。 |
| 8 | BigDecimal pide(BigDecimal pisor, int roundingMode) 此方法返回一個BigDecimal,其值為(this/除數),其標度是this.scale()。 |
| 9 | BigDecimal pide(BigDecimal pisor, int scale, int roundingMode) 此方法返回一個BigDecimal,其值為(this/除數),其標度如指定。 |
| 10 | BigDecimal pide(BigDecimal pisor, int scale, RoundingMode roundingMode) 此方法返回一個BigDecimal,其值為(this/除數),其標度為指定。 |
| 11 | BigDecimal pide(BigDecimal pisor, MathContext mc) 此方法返回一個BigDecimal,其值為(this/除數),與根據上下文設置進行舍入。 |
| 12 | BigDecimal pide(BigDecimal pisor, RoundingMode roundingMode) 此方法返回一個BigDecimal,其值為(this/除數),其標度是this.scale()。 |
| 13 | BigDecimal[ ] pideAndRemainder(BigDecimal pisor) 這個方法返回一個包含pideToIntegralValue結果,其次是剩下的兩個操作數的結果的結果由兩個元素組成的BigDecimal數組。 |
| 14 | BigDecimal[ ] pideAndRemainder(BigDecimal pisor, MathContext mc) 這個方法返回一個包含pideToIntegralValue的結果,隨后其余與上根據上下文設置進行舍入計算兩個操作數的結果的結果由兩個元素組成的BigDecimal數組。 |
| 15 | BigDecimal pideToIntegralValue(BigDecimal pisor) 此方法返回一個BigDecimal,其值為商(這/除數)的整數部分四舍五入。 |
| 16 | BigDecimal pideToIntegralValue(BigDecimal pisor, MathContext mc) 此方法返回一個BigDecimal,其值是(這/除數)的整數部分。 |
| 17 | double doubleValue() 此方法將BigDecimal轉換為double。 |
| 18 | boolean equals(Object x) 這種方法比較BigDecimal與指定對象是否相等。 |
| 19 | float floatValue() 這種方法將BigDecimal轉換為float。 |
| 20 | int hashCode() 此方法返回BigDecimal的哈希代碼。 |
| 21 | int intValue() 這種方法將BigDecimal轉換為int。 |
| 22 | int intValueExact() 這種方法將BigDecimal轉換為int,檢查丟失的信息。 |
| 23 | long longValue() 這種方法將BigDecimal轉換為long。 |
| 24 | long longValueExact() 這種方法將BigDecimal轉換為long,檢查丟失的信息。 |
| 25 | BigDecimal max(BigDecimal val) 此方法返回此BigDecimal和val的最大值。 |
| 26 | BigDecimal min(BigDecimal val) 此方法返回此BigDecimal和val的最小值。 |
| 27 | BigDecimal movePointLeft(int n) 此方法返回一個BigDecimal,它等效於將該值的小數點移動n位到左邊。 |
| 28 | BigDecimal movePointRight(int n) 此方法返回一個BigDecimal,它等效於將該值的小數點移動n位到右邊。 |
| 29 | BigDecimal multiply(BigDecimal multiplicand) 此方法返回一個BigDecimal,其值為(this×被乘數),其標度為(this.scale()+ multiplicand.scale())。 |
| 30 | BigDecimal multiply(BigDecimal multiplicand, MathContext mc) 此方法返回一個BigDecimal,其值為(this×乘數),以根據上下文設置進行舍入。 |
| 31 | BigDecimal negate() 此方法返回一個BigDecimal,其值是(+this),其標度是this.scale()。 |
| 32 | BigDecimal negate(MathContext mc) 此方法返回一個BigDecimal,其值是(-this),根據上下文設置進行舍入。 |
| 33 | BigDecimal plus() 此方法返回一個BigDecimal,其值是(+this),其標度是this.scale()。 |
| 34 | BigDecimal plus(MathContext mc) 此方法返回一個BigDecimal,其值是(+this),根據上下文設置進行舍入。 |
| 35 | BigDecimal pow(int n) 此方法返回一個BigDecimal,其值是(thisn),冪被精確計算,使其具有無限精度。 |
| 36 | BigDecimal pow(int n, MathContext mc) 此方法返回一個BigDecimal,其值是 (thisn). |
| 37 | int precision() 此方法返回此BigDecimal的精度。 |
| 38 | BigDecimal remainder(BigDecimal pisor) 此方法將BigDecimal轉換為一個byte,檢查丟失的信息。 |
| 39 | BigDecimal remainder(BigDecimal pisor, MathContext mc) 此方法返回一個BigDecimal,其值為(this%除數),根據上下文設置進行舍入。 |
| 40 | BigDecimal round(MathContext mc) 此方法返回根據MathContext設置舍入一個BigDecimal。 |
| 41 | int scale() 此方法返回此BigDecimal的標度。 |
| 42 | BigDecimal scaleByPowerOfTen(int n) 此方法返回一個BigDecimal,其數值等於 (this * 10n). |
| 43 | BigDecimal setScale(int newScale) 此方法返回一個BigDecimal,其標度為指定值,其值在數值上等於該BigDecimal。 |
| 44 | BigDecimal setScale(int newScale, int roundingMode) 此方法返回一個BigDecimal,其標度為指定值,其非標度值乘以或除以此BigDecimal的非標度值除以十的次冪,以保持其整體值決定。 |
| 45 | BigDecimal setScale(int newScale, RoundingMode roundingMode) 此方法返回一個BigDecimal,其標度為指定值,其非標度值乘以或除以此BigDecimal的非標度值除以十的次冪,以保持其整體價決定。 |
| 46 | short shortValueExact() 這種方法將BigDecimal轉換為short,檢查丟失的信息。 |
| 47 | int signum() 此方法返回此BigDecimal的正負號函數。 |
| 48 | BigDecimal stripTrailingZeros() 此方法返回一個BigDecimal,它在數值上等於這一個,但與從表示形式移除所有尾部零。 |
| 49 | BigDecimal subtract(BigDecimal subtrahend) 此方法返回一個BigDecimal,其值為(this - 減數),其標度為max(this.scale(),subtrahend.scale())。 |
| 50 | BigDecimal subtract(BigDecimal subtrahend, MathContext mc) 此方法返回一個BigDecimal,其值為(this - 減數),與根據上下文設置進行舍入。 |
| 51 | BigInteger toBigInteger() 這種方法將BigDecimal轉換為BigInteger。 |
| 52 | BigInteger toBigIntegerExact() 這種方法將BigDecimal轉換為BigInteger,檢查丟失的信息。 |
| 53 | String toEngineeringString() 此方法返回此BigDecimal的字符串表示形式,使用工程計數法,如果需要指數。 |
| 54 | String toPlainString() 此方法返回此BigDecimal的字符串表示形式不帶指數字段。 |
| 55 | String toString() 此方法返回此BigDecimal的字符串表示形式,用科學記數法,如果需要指數。 |
| 56 | BigDecimal ulp() 此方法返回一個ULP的此BigDecimal的大小,在最后一位的單位。 |
| 57 | BigInteger unscaledValue() 此方法返回一個BigInteger,其值是此BigDecimal的非標度值。 |
| 58 | static BigDecimal valueOf(double val) 這種方法轉換double為一個BigDecimal,使用Double.toString(double)方法提供的double的規范化字符串表示形式。 |
| 59 | static BigDecimal valueOf(long val) 這種方法將一個long值轉換為BigDecimal帶有刻度的零值。 |
| 60 | static BigDecimal valueOf(long unscaledVal, int scale) 這種方法轉換long的非標度值和一個int尺度成一個BigDecimal。 |
鳴謝:https://www.2cto.com/kf/201608/533725.html
二、類的應用
在java中,兩個浮點數進行加減運算,和乘除中不是整數的運算,這些的運算結果將可能被顯示出更多的小數位。所以就需要用到BigDecimal類提供的運算方法進行運算。
舉例說明:兩個數相乘。
方式一:
BigDecimal bigDecimal1=new BigDecimal(1.2);
BigDecimal bigDecimal2=new BigDecimal(2);
String result=bigDecimal1.multiply(bigDecimal2).toPlainString()
結果是:result=2.3999999999999999999.......;
BigDecimal bigDecimal1=new BigDecimal(1.2+"");
BigDecimal bigDecimal2=new BigDecimal(2+"");
String result=bigDecimal1.multiply(bigDecimal2).toPlainString()
結果是:result=2.4;
通過上面例子的對比,可知,在這種情況之下,進行加減乘除運算時,創建BigDecimal對象時,傳入的參數要用字符串。
