5.8 BigDecimal類
雙精度浮點型變量double可以處理16位有效數。在實際應用中,需要對更大或者更小的數進行運算和處理。Java在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數進行精確的運算。表5.7中列出了BigDecimal類的主要構造器和方法。
表5.7 BigDecimal類的主要構造器和方法
構 造 器描 述
BigDecimal(int)創建一個具有參數所指定整數值的對象。
BigDecimal(double)創建一個具有參數所指定雙精度值的對象。
BigDecimal(long)創建一個具有參數所指定長整數值的對象。
BigDecimal(String)創建一個具有參數所指定以字符串表示的數值的對象。
續表
方 法描 述
add(BigDecimal)BigDecimal對象中的值相加,然後返回這個對象。
subtract(BigDecimal)BigDecimal對象中的值相減,然後返回這個對象。
multiply(BigDecimal)BigDecimal對象中的值相乘,然後返回這個對象。
divide(BigDecimal)BigDecimal對象中的值相除,然後返回這個對象。
toString()將BigDecimal對象的數值轉換成字符串。
doublue()將BigDecimal對象中的值以雙精度數返回。
floatValue()將BigDecimal對象中的值以單精度數返回。
longValue()將BigDecimal對象中的值以長整數返回。
intValue()將BigDecimal對象中的值以整數返回。
注意,由於一般數值類型,例如double,不能準確地代表16位有效數以上的數字,在使用BigDecimal時,應用BigDecimal(String)構造器創建對象纔有意義。另外,BigDecimal所創建的是對象,我們不能使用傳統的+、-、*、/等算術運算符直接對其對象進行數學運算,而必須調用其相對應的方法。方法中的參數也必須是BigDecimal的對象。
構造器是類的特殊方法,專門用來創建對象,特別是帶有參數的對象。關於構造器概念和編寫技術,將在本書第6章詳細介紹。
下面討論BigDecimal的一些常用例子:
//完整程序例子在本書配套資源目錄Ch5中名爲BigDecimalTestApp.Java
//創建BigDecimal對象
BigDecimal bigNumber = new BigDecimal("89.1234567890123456789");
BigDecimal bigRate = new BigDecimal(1000);
BigDecimal bigResult = new BigDecimal(); //對象bigResult的值爲0.0
//對bigNumber的值乘以1000,結果 賦予bigResult
bigResult = bigNumber.multiply(bigRate);
System.out.println(bigResult.toString());
//或者System.out.println(bigResult);
//顯示結果:89123.4567890123456789000
//以雙精度數返回bigNumber中的值
double dData = bigNumber.doublue();
System.out.println(dData); //結果:89.12345678901235
注意使用方法doublue()將對象bigNumber中的值以雙精度數值返回時,將丟失數據的準確性。使用其他方法,如xxxValue()時均存在這個問題,使用時必須慎重。
<!--[if !vml]--><!--[endif]-->3W BigDecimal用來對超過16有效位以上的數值進行運算和操作。所有的算術運算都通過調用其相應的方法進行。創建一個超過16有效位數的對象時,運用BigDecimal(String)纔可避免丟失數字的精確度。
5.9 BigDecimal和格式化
由於NumberFormat類的format()方法可以使用BigDecimal對象作爲其參數,可以利用BigDecimal對超出16位有效數字的貨幣值,百分值,以及一般數值進行格式化控制。
package Test; import java.math.BigDecimal; //引入這個包 public class Test { |