1. 程式人生 > >Java中對大數的操作

Java中對大數的操作

1.整型大數類(BigInteger):

//構造:BigInteger(String val) 將 BigInteger的十進位制字串表示形式轉換為 BigInteger
//物件.toString(int radix) 返回此 BigInteger 的給定基數的字串表示形式
//物件.pow(int exponent) 返回其值為 (thisexponent) 的 BigInteger 
//除此還有max,min,mod,gcd最大公約數,add,subtract,mutiply,divide等
import java.math.BigInteger;
//BigInteger類
public class BigIntegerDemo {
	
	public static void main(String[] args) {
		BigInteger bi1 = new BigInteger("987654321");//構造方法,將字串轉換為BigInteger類
		BigInteger bi2 = new BigInteger("123456789");
		System.out.println("加法:" + bi1.add(bi2));//呼叫add()方法
		System.out.println("減法:" + bi1.subtract(bi2));
		System.out.println("乘法:" + bi1.multiply(bi2));
		System.out.println("除法:" + bi1.divide(bi2));
		System.out.println("取餘:" + bi1.mod(bi2));
		//public BigInteger[] divideAndRemainder(BigInteger val)返回包含 (this / val) 後跟 (this % val) 的兩個 BigInteger 的陣列
		BigInteger div[] =  bi1.divideAndRemainder(bi2);
		System.out.println("商餘除法:商:" + div[0] + ",餘:" + div[1]);
		System.out.println("bi1的5次方為:" + bi1.pow(5));
	}
}

1.浮點型大數類(BigDecimal):
//構造:
//BigDecimal(BigInteger val) 將 BigInteger 轉換為 BigDecimal。
//BigDecimal(String val) 將 BigDecimal 的字串表示形式轉換為 BigDecimal,還可以int double long
//方法:
//物件.toString()返回此 BigDecimal 的字串表示形式,如果需要指數,則使用科學記數法
//物件.toPlainString() 返回不帶指數字段的此 BigDecimal 的字串表示形式。
//物件.stripTrailingZeros() 返回數值上等於此小數,但從該表示形式移除所有尾部零的 BigDecimal。
//物件.BigDecimal add(BigDecimal augend) 返回一個 BigDecimal,其值為 (this + augend),其標度(精度)為 max(this.scale(), augend.scale())。 
import java.math.BigDecimal;
public class BigDecimalDemo {

	public static void main(String[] args) {
		BigDecimal bi1 = new BigDecimal(2345.6789);//將double型別轉換為BigDecimal型別
		BigDecimal bi2 = new BigDecimal(98765.4321);
		System.out.println("BigDecimal型別轉換為double型別:" + bi1.doubleValue());//將BigDecimal型別轉換為double型別
		System.out.println("加法:" + bi1.add(bi2).doubleValue());//add()方法返回值型別是BigDecimal型別需要轉換為double
		System.out.println("減法:" + bi1.subtract(bi2).doubleValue());
		System.out.println("乘法:" + bi1.multiply(bi2).doubleValue());
		//divide(物件,保留的位數,四捨五入的常量)  除法方法的應用
		System.out.println("BigDecimal.ROUND_HALF_UP=" + BigDecimal.ROUND_HALF_UP);
		System.out.println("除法:" + bi2.divide(bi1,BigDecimal.ROUND_HALF_UP).doubleValue());//未四捨五入
		System.out.println("除法:" + bi2.divide(bi1,3,BigDecimal.ROUND_HALF_UP).doubleValue());//保留三位小數
		
		BigDecimal bi3 = new BigDecimal("12345.6789");//將String型別轉換為BigDecimal型別
		BigDecimal bi4 = new BigDecimal("98765.4321111");
		System.out.println("加法:" + bi3.add(bi4).doubleValue());//add()方法返回值型別是BigDecimal型別需要轉換為double
		System.out.println("除法:" + bi4.divide(bi3,BigDecimal.ROUND_HALF_UP).toEngineeringString());
		System.out.println("BigDecimal型別轉換為EngineeringString型別:" + bi3.toEngineeringString());
		
	}
}