1. 程式人生 > >java BigInteger和BigDecimal類

java BigInteger和BigDecimal類

BigInteger類  java.math.BigInteger

BigInteger類可以描述比long型別大的資料,可以解決資料溢位的問題,

不能使用+-*/這些運算子對BigInteger物件操作

構造方法(有好幾個,只列舉一個)

BigInteger(String val)傳入的整形字串

常用方法

valueOf(long val)初始化

add(BigInteger val)加

subtract(BigInteger val)減

multiply(BigInteger val)乘

divide(BigInteger val)

public BigInteger[] divideAndRemainder(BigInteger val)取商和餘數,返回一個BigInteger陣列,第一個元素儲存商,第二個元素儲存餘數

import java.math.BigInteger;

public class BigIntegerAndBigDecimal {
	public static void main(String[] args) {
		//建立BigInteger物件,闖入字串型別的整形
		BigInteger b1 = new BigInteger("200000000000000000001");
		//呼叫靜態方法valueOf(long val),返回BigInteger型別物件
		BigInteger b2 = BigInteger.valueOf(58888888888888888L);
		//加
		System.out.println(b1.add(b2));
		//減
		System.out.println(b1.subtract(b2));
		//乘
		System.out.println(b1.multiply(b2));
		//除
		System.out.println(b1.divide(b2));
		//求商和餘數,返回一個BigInteger陣列,儲存商和餘數
		BigInteger[] b3 = b1.divideAndRemainder(b2);
		for (BigInteger i : b3) {
			System.out.println(i);
		}
	}
}
out:
200058888888888888889
199941111111111111113
11777777777777777600058888888888888888
3396
3396
13333333333336353

BigDecimal類 java.math.BigDecimal

BigDecimal 類則是針對很大的小數的處理類精度比較高,可以處理金融類業務,如果對計算的資料要求高精度時,必須使用BigDecimal類

構造方法很多,列舉幾個

BigDecimal(double val)//傳入double型別的值,可能會損失精度,不允許使用

BigDecimal(String val)//將String型別轉換成BigDecimal型別資料,推薦,這種構造方法是完全可預知的

public static BigDecimal valueOf(long val)這兩個靜態方法可以初始化BigDecimal物件,返回BigDecimal型別

public static BigDecimal valueOf(double val),valueOf(double val) 內部實現,仍是將 double 型別轉為 String 型別;

類方法

.BigDecimal add(BigDecimal value):加,求兩個BigDecimal型別資料的和。返回Bigdecimal型別

BigDecimal subtract(BigDecimal value):減,求兩個BigDecimal型別資料的差。

BigDecimal multiply(BigDecimal  value):乘,求兩個BigDecimal型別資料的積。

BigDecimal divide(BigDecimal divisor):除,求兩個BigDecimal型別資料的商。

BigDecimal remainder(BigDecimal divisor):求餘數,求BigDecimal型別資料除以divisor的餘數。

BigDecimal max(BigDecimal value):最兩個BigDecimal型別資料的最大值。

BigDecimal min(BigDecimal value):求兩個BigDecimal型別資料的最小值。

BigDecimal abs():求絕對值,求BigDecimal型別資料的絕對值。

BigDecimal negate():求相反數,求BigDecimal型別資料的相反數
例子:

import java.math.BigDecimal;

public class BigDecimalTest01 {
	public static void main(String[] args) {
		double d1 = 2.0;
		double d2 = 1.1;
		System.out.println(d1 - d2);//0.8999999999999999
		//BigDecimal(double val)這種構造方式可能會損失精度
		BigDecimal b1 = new BigDecimal(2.0);
		BigDecimal b2 = new BigDecimal(1.1);
		////0.899999999999999911182158029987476766109466552734375
		System.out.println(b1.subtract(b2));
		//以下兩種方式不會損失精度
		BigDecimal b3 = new BigDecimal("2.0");
		BigDecimal b4 = BigDecimal.valueOf(1.1);
		System.out.println(b3.subtract(b4));//0.9
	}
}
out:
0.8999999999999999
0.899999999999999911182158029987476766109466552734375
0.9

DecimalFormat類 java.text.DecimalFormat,繼承自抽象類NumberFormat

NumberFormat類的方法

public static final NumberFormat getCurrencyInstance(),靜態方法,建立一個NumberFormat類的物件並返回引用,該引用指定貨幣格式為系統預設的貨幣格式,預設時,返回的是當地的貨幣格式

String format(double number)格式化資料,返回字串型別

DecimalFormat類的構造方法,列舉一個

public DecimalFormat(String pattern)//傳入字串型別的格式(要格式化成的樣式)

public class DecimalFormatTest {
	public static void main(String[] args) {
		// 獲取父類的例項,格式化123456
		String s1 = DecimalFormat.getCurrencyInstance().format(123456);
		System.out.println(s1);
		// 建立DecimalFormat物件,傳入 要數字格式化成的樣子
		DecimalFormat d1 = new DecimalFormat("###,###,###,###.0000");
		// 格式化數字成指定的形式,DecilmalFormat類沒有format(double number)方法,
                     則呼叫父類的該同名方法
		String s2 = d1.format(123456);// 123,456,0000
		System.out.println(s2);

		String s3 = d1.format(123.456);//"123,4560"
		System.out.println(s3);
		DecimalFormat d2 = new DecimalFormat("##,###.00");
		String s4 = d2.format(654987123456.789);// 6549,8712,3456.79
		System.out.println(s4);
	}
}
out:
¥123,456.00
123,456.0000
123.4560
6549,8712,3456.79

  # 和 0 兩種佔位符號來指定數字長度。0 表示如果位數不足則以 0 填充,如果尾數多餘0的個數最後一位四捨五入,

# 表示指定位置不存在數字,則不顯示,如果數字長度大於#的個數,就按照#號設定的位數將多的數顯示出來。