高精度運算:BigInteger和BigDecimal(處理大數(shù)據(jù)樱蛤,當數(shù)據(jù)范圍超出基本數(shù)據(jù)類型最大范圍時可用)
在Java中有兩個類BigInteger和BigDecimal分別表示大整數(shù)類和大浮點數(shù)類喳资,至于兩個類的對象能表示最大范圍不清楚,理論上能夠表示無,無限大的數(shù),只要計算機內存足夠大天吓。
這兩個類都在java.math.*包中蘸际,因此每次必須在開頭處引用該包
1)BigInteger
BigInteger類型的數(shù)字范圍較 Integer 類型的數(shù)字范圍要大得多。我們都知道 Integer 是 Int 的包裝類苍凛,int 的最大值為 231-1趣席,如果要計算更大的數(shù)字,使用Integer 數(shù)據(jù)類型就無法實現(xiàn)了醇蝴,所以 Java 中提供了BigInteger 類來處理更大的數(shù)字宣肚。 BigInteger 支持任意精度的整數(shù),也就是說在運算中 BigInteger 類型可以準確地表示任何大小的整數(shù)值而不會丟失任何信息
#基本操作
BigInteger的運算都沒有對原值進行操作悠栓,而是返回一個新的BigInteger對象霉涨,1.valueOf(parament); 將參數(shù)轉換為制定的類型
比如 int a=3;
BigInteger b=BigInteger.valueOf(a);//b=3
String s=”12345”;
BigInteger c=BigInteger.valueOf(s);//c=12345
2.add(); 大整數(shù)相加
BigInteger a=new BigInteger(“23”);
BigInteger b=new BigInteger(“34”);
a.?add(b);//57
3.subtract(); 相減
4.multiply(); 相乘
5.divide();?相除取整
6.remainder(); 取余
7.pow();?a.pow(b)=a^b
8.gcd();?最大公約數(shù)
9.abs(); 絕對值
10.negate(); 取反數(shù)
11.mod(); a.mod(b)=a%b=a.remainder(b);
12.max(); min();
13.compareTo()兩者比較
基本常量(3個):
A=BigInteger.ONE?1
B=BigInteger.TEN?10
C=BigInteger.ZERO?0
//鍵盤讀入
Scanner cin=new Scanner(System.in);// 讀入
BigInteger m=scanner.BigInteger();
#進制轉換
//類型轉換(返回類型如下)
2)BigDecimal
在日常開發(fā)中我們經(jīng)常會碰到小數(shù)計算,而小數(shù)直接計算的話會出現(xiàn)一些小小的錯誤惭适,如下:
System.out.println(1.01 + 2.02);
理想輸出3.03笙瑟,實際上輸出的是3.0300000000000002。這是因為不論是float 還是double都是浮點數(shù)癞志,而計算機是二進制的往枷,浮點數(shù)會失去一定的精確度。有沒有不失精度的辦法呢?這里就要用到BigDecimal了错洁。
java的float只能用來進行科學計算或工程計算秉宿,在大多數(shù)的商業(yè)計算中,一般采用java.math.BigDecimal類來進行精確計算
基本方法如BigInteger墓臭,其他用法如下:
#使用BigDecimal實現(xiàn)四舍五入(支持float和double類型)
#保留有效數(shù)字