Java大数の操作


Javaの大数に対する操作のまとめ
1、BigInteger:大きい整数に対して、文字列方式で人を伝える

  
  
  
  
  1. import java.math.BigInteger ; 
  2. public class BigIntegerDemo01{ 
  3.     public static void main(String args[]){ 
  4.         BigInteger bi1 = new BigInteger("123456789") ;  //  BigInteger  
  5.         BigInteger bi2 = new BigInteger("987654321") ;  //  BigInteger  
  6.         System.out.println(" :" + bi2.add(bi1)) ;    //   
  7.         System.out.println(" :" + bi2.subtract(bi1)) ;   //   
  8.         System.out.println(" :" + bi2.multiply(bi1)) ;   //   
  9.         System.out.println(" :" + bi2.divide(bi1)) ; //   
  10.         System.out.println(" :" + bi2.max(bi1)) ;  //   
  11.         System.out.println(" :" + bi2.min(bi1)) ;  //   
  12.         BigInteger result[] = bi2.divideAndRemainder(bi1) ; //   
  13.         System.out.println(" :" + result[0] +  
  14.             "; :" + result[1]) ; 
  15.     } 
  16. }; 

実行結果:

  
  
  
  
  1. :1111111110 
  2. :864197532 
  3. :121932631112635269 
  4. :8 
  5. :987654321 
  6. :123456789 
  7. :8; :9 

2、BigDecimal:大きな浮動小数点数に対して、文字列で入力する

  
  
  
  
  1. import java.math.* ; 
  2. class MyMath{ 
  3.     public static double add(double d1,double d2){      //   
  4.         BigDecimal b1 = new BigDecimal(d1) ; 
  5.         BigDecimal b2 = new BigDecimal(d2) ; 
  6.         return b1.add(b2).doubleValue() ; 
  7.     } 
  8.     public static double sub(double d1,double d2){      //   
  9.         BigDecimal b1 = new BigDecimal(d1) ; 
  10.         BigDecimal b2 = new BigDecimal(d2) ; 
  11.         return b1.subtract(b2).doubleValue() ; 
  12.     } 
  13.     public static double mul(double d1,double d2){      //   
  14.         BigDecimal b1 = new BigDecimal(d1) ; 
  15.         BigDecimal b2 = new BigDecimal(d2) ; 
  16.         return b1.multiply(b2).doubleValue() ; 
  17.     } 
  18.     public static double div(double d1,double d2,int len){      //   
  19.         BigDecimal b1 = new BigDecimal(d1) ; 
  20.         BigDecimal b2 = new BigDecimal(d2) ; 
  21.         return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP).doubleValue() ; 
  22.     } 
  23.     public static double round(double d,int len){   //   
  24.         BigDecimal b1 = new BigDecimal(d) ; 
  25.         BigDecimal b2 = new BigDecimal(1) ; 
  26.         return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP).doubleValue() ; 
  27.     } 
  28. }; 
  29.  
  30. public class BigDecimalDemo01{ 
  31.     public static void main(String args[]){ 
  32.         System.out.println(" :" + MyMath.round(MyMath.add(10.345,3.333),1)) ; 
  33.         System.out.println(" :" + MyMath.round(MyMath.sub(10.345,3.333),3)) ; 
  34.         System.out.println(" :" + MyMath.round(MyMath.mul(10.345,3.333),2)) ; 
  35.         System.out.println(" :" + MyMath.div(10.345,3.333,3)) ; 
  36.     } 
  37. }; 

実行結果:

  
  
  
  
  1. :13.7 
  2. :7.012 
  3. :34.48 
  4. :3.104 

まとめ:大数を文字列で伝える場合は、'+-*/'ではなく、提供された加減乗除方法を再利用してデータを操作します.