天天看點

Java之------大數(BigInteger,BigDecimal)

Java大數 1、java.math.BigInteger類 不可變的任意精度的整數。所有操作中,都以二進制補碼形式表示。BigInteger 提供所有 Java 的基本整數操作符的對應物,并提供 java.lang.Math 的所有相關方法。

另外,BigInteger 還提供以下運算:模算術、GCD 計算、質數測試、素數生成、位操作以及一些其他操作。

BigInteger中要申明一個整數需要用類似申明一個對象的方法,比方說整數1,就要這樣子:BigInteger  x =new BigInteger(""+1);或者BigInteger x = BigInteger.valueOf(1L); 下面用代碼來說話吧:

import java.math.BigInteger;  
  
public class BigIntegerDemo {  
  
    public static void main(String[] args) {  
        //這種方式是錯的:BigInteger x = 1;  
          
        //大數中的1---法1:  
        BigInteger x = new BigInteger(""+1);  
        System.out.println(x.intValue());  
          
        // 100!  
       BigInteger a = jc(100);  
       System.out.println(a.toString());  
       System.out.println(a.toString(16));//以指定進制的方式輸出  
    }  
    public static BigInteger jc( int n){  
        /*求n的階乘---基本資料類型的寫法 
        int s=1; 
        for(int i=1;i<=n;i++){ 
            s = s*i; 
        } 
        return s; 
        */  
          
        //求n的階乘---大數類型的寫法  
        //大數中的1---法2:  
        BigInteger s = BigInteger.valueOf(1L);  
        for(int i=1;i<=n;i++){  
            s = s.multiply( BigInteger.valueOf(i) );  
        }  
        return s;  
    }  
} 
           

2、java.math.BigDecimal類 不可變的、任意精度的有符号十進制數。 BigDecimal由任意精度的整數非标度值和32位的整數标度(scale: 以10為底的指數)。

BigDecimal 類提供以下操作:算術、标度操作、舍入、比較、雜湊演算法和格式轉換。toString( )方法提供 BigDecimal 的規範表示形式。 

申明一個數的方法與BigInteger類似 下面還是在代碼裡面具體地說吧:

import java.math.BigDecimal;  
  
public class BigDecimalDemo {  
  
    public static void main(String[] args) {  
        double s = 0;  
        for(int i=0;i<10;i++){  
            s = s+0.1;  
        }  
        System.out.println("s="+s);  
          
        BigDecimal d = new BigDecimal(0D);  
        for(int i=0;i<10;i++){  
            d = d.add( new BigDecimal(0.1D));  
            //BigDecimal加法的表示方式  
        }  
        System.out.println("d="+d);  
        System.out.println(d.doubleValue());  
        //doubleValue()方法将此 BigDecimal 轉換為 double。預設保留一位小數  
          
        double dd = 12.12345667774332D;  
        BigDecimal bd = new BigDecimal(dd);  
          
        //保留7位小數且四舍五入  
        //下面的ROUD_UP舍入遠離零的舍入模式。在丢棄非零部分之前始終增加數字。注意,此舍入模式始終不會減少計算值的大小。  
        bd = bd.divide(new BigDecimal(1.0), 7, BigDecimal.ROUND_UP);  
          
        System.out.println(bd.doubleValue());  
    }  
}
           

2、java.math.BigDecimal類 不可變的、任意精度的有符号十進制數。 BigDecimal由任意精度的整數非标度值和32位的整數标度(scale: 以10為底的指數)。

BigDecimal 類提供以下操作:算術、标度操作、舍入、比較、雜湊演算法和格式轉換。toString( )方法提供 BigDecimal 的規範表示形式。 

申明一個數的方法與BigInteger類似 下面還是在代碼裡面具體地說吧: