1. 程式人生 > >Java BigDecimal詳解,提供了豐富的四捨五入規則

Java BigDecimal詳解,提供了豐富的四捨五入規則

原文地址:https://www.cnblogs.com/qynprime/p/8028397.html

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物件時,傳入的引數要用字串。
標籤: BigDecimal 四捨五入 科學計數轉換成字不含e的符串