1. 程式人生 > >BigDecimal使用整理

BigDecimal使用整理

clas result tip 例如 實際應用 必須 商業 params java

BigDecimal使用整理

一、 BigDecimal簡介

計算機計算中無論是float還是double都是浮點數,由於計算機是二進制的,導致在在浮點數計算時會出現精度丟失,因此引入BigDecimaljava.math.BigDecimal)。

Javajava.math包中提供的 APIBigDecimal,用來對超過16位有效位的數進行精確的運算。雙精度浮點型變量double可以處理16位有效數。在實際應用中,需要對更大或者更小的數進行運算和處理。floatdouble只能用來做科學計算或者是工程計算,在商業計算中要用 java.math.BigDecimal(BigDecimal

)所創建的是對象,我們不能使用傳統的+-*/等算術運算符直接對其對象進行數學運算,而必須調用BigDecimal相對應的方法。方法中的參數也必須是BigDecimal的對象。

二、 BigDecimal構造方法

Bigdecimal構造時,不要直接使浮點數作為構造方法的參數,這樣會出現精度丟失的問題。

Bigdecimal構造時使用BigDecimal.valueOf()方法,或者使用字符串作為BigDecimal構造方法的參數,避免精度丟失的問題。

例如:

? BigDecimal b1 = new BigDecimal("1.23");//1.23

? BigDecimal b2 = BigDecimal.valueOf(1.23);//1.23

? BigDecimal b3 = new BigDecimal(String.valueof(1.23));//1.23

精度丟失例如:

BigDecimal one1 = new BigDecimal(1.23); // 則結果會出現精度問題, 相應值會變成1.229999999999999982236431605997495353221893310546875
 

另外除了這兩種外,特殊的像0110可以這樣寫。

1. BigDecimal zero = BigDecimal.ZERO;

2. BigDecimal one = BigDecimal.ONE;

3. BigDecimal ten = BigDecimal.TEN;

三、      BigDecimal的加減乘除運算
?  public BigDecimal add(BigDecimal value); // 加法
?  public BigDecimal subtract(BigDecimal value); // 減法 
?  public BigDecimal multiply(BigDecimal value); // 乘法
?  public BigDecimal divide(BigDecimal value); // 除法
 
BigDecimal的運算都沒有對原值進行操作,而是返回一個新的BigDecimal對象。
 
四、      BigDecimal的比較方法(compareToequals對比)

BigDecimal在數字上小於等於或大於被比較對象時,返回 -10 1

例如:

BigDecimal one = BigDecimal.valueOf(1);

BigDecimal two = new BigDecimal("2");

BigDecimal three = one.add(two);

int i1 = one.compareTo(two); // -1

int i2 = two.compareTo(two); // 0

int i3 = three.compareTo(two); // 1

註意值相等但具有不同精度的兩個BigDecimal對象(如,1.0 1.00)被認為是相等的。

註意BigDecimal的比較運算最好不要用equals實現,因為BigDecimalequals方法在比較的時候要比較兩個數值的精度。

// 精度不同,數值不相等

BigDecimal decimal1 = BigDecimal.valueOf(0);

BigDecimal decimal2 = new BigDecimal("0.00");

System.out.println("the result is " +decimal1.equals(decimal2)); // false

// 設置為相同精度後再次比較

BigDecimal decimal3 = BigDecimal.valueOf(0).setScale(2);

BigDecimal decimal4 = new BigDecimal("0.00").setScale(2);

System.out.println("the result is " +decimal3.equals(decimal4)); // true

使用BigDecimalequals方法判斷兩個BigDecimal類型的數據時,需要設置精度,否則結果可能不正確

 
 

BigDecimal使用整理