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());
	}

你可能感兴趣的:(java)