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的個數最後一位四捨五入,
# 表示指定位置不存在數字,則不顯示,如果數字長度大於#的個數,就按照#號設定的位數將多的數顯示出來。