BigInteger
Java用來處理超過long型范圍的數的封裝類医瘫。
構造方法
BigInteger b1 = new BigInteger(String val);
BigInteger b1 = new BigInteger(String val , int radix);
常用方法
加減乘除運算需要借助方法:
b1.add(b2);
b1.subtract(b2);
b1.multiply(b2);
b1.divide(b2);
返回BigInteger對象
BigInteger b1 = new BigInteger("12345678901234567890123");
BigInteger b2 = new BigInteger("1234567890");
System.out.println(b1.add(b2));
System.out.println(b1.subtract(b2));
System.out.println(b1.multiply(b2));
System.out.println(b1.divide(b2));
OUT:
12345678901235802458013
12345678901233333322233
15241578751714678875170903950470
10000000001000
其他方法:
remainder(); 取余
pow();乘方a.pow(b)=a^b
gcd();最大公約數
abs(); 絕對值
negate(); 取反數
BigDecimal
Java用來精確處理浮點數的封裝類慰于。
因為浮點數計算不精確勤庐,例如:
public static void main(String[] args) {
System.out.println(0.05+0.01);
}
out:
0.060000000000000005
double 類型(默認)計算會發(fā)生精度缺失踩验。
構造器
推薦使用:(可以保存精度)
BigDecimal(String val)
注:
如果一定要使用double類型的數據作為傳遞參數拌阴,請這樣:
BigDecimal.valueOf(double val)
因為称龙,BigDecimal(double val)
參數會丟失精度孽糖。
常用方法
精確浮點數運算,類似BigInteger:
BigDecimal b1 = new BigDecimal("0.05");
BigDecimal b2 = new BigDecimal("0.01");
System.out.println(b1.add(b2));
System.out.println(b1.subtract(b2));
System.out.println(b1.multiply(b2));
System.out.println(b2.divide(b1));
System.out.println(b1.compareTo(b2));
System.out.println(b1.max(b2));
out:
0.06
0.04
0.0005
0.2
1
0.05
注意:除法涉及到保留位數苹威,否則出現除不盡的異常昆咽。
因為調用繁瑣, 需要將每個double轉化為BigDecimal,可以做成一個工具類掷酗,包含加減乘除调违。
private static final int DIV_SCALE = 9;//保留位數
public static double div(double b1 , double b2){
BigDecimal bd1 = BigDecimal.valueOf(b1);
BigDecimal bd2 = BigDecimal.valueOf(b2);
//設置除不盡四舍五入
return bd1.divide(bd2,DIV_SCALE,RoundingMode.HALF_UP).doubleValue();
}
public static void main(String[] args) {
System.out.println(div(0.045 ,0.007));
}
out:
6.428571429