java中的大数处理

import java.math.BigInteger;

import org.junit.Test;
/*
 * ☆玩转大数(BigInteger):
 * 1.基本数据类型的值要转换成大数(经常会用到),用下面两种方法
 *   1)构造方法
 *   2)valueOf()方法
 * 2.加、减、乘、除、取模等常用数学运算全部用函数来实现,不能数学用运算符。
 *   并且一般的函数参数都是大数对象,不能用数值,也不能用整数及包装类变量。
 *   还要注意,一般的函数在进行大数运算时,不是原地修改,而是返回修改结果。
 * 3.每个大数变量是一个BigInteger类型的对象,不是普通变量,也不是一个数值
 * 
 */

public class BigIntegerDemo {
	
	@Test//计算阶乘n! ---基本数据类型的实现方式
	public void demo1(){
		long lg = jc1(500);
		System.out.println(lg);
	}
	public long jc1(int n){
		long s = 1;
		for(int i=1; i<=n; i++){
			s = s*i;
		}
		return s;
	}
	
	
	@Test//计算阶乘n! ---BigInteger的实现方式
	public void demo2(){
		BigInteger lg = jc2(500);
		System.out.println( lg );
	}
	
	public BigInteger jc2(int n){
		BigInteger s = new BigInteger("1"); //把1转换成大数---法1:构造方法
		for(int i=1; i<=n; i++){
			s = s.multiply( BigInteger.valueOf(i) ); //把i转换成大数---法2:valueOf()方法
		}
		return s;
	}
	
	
	
}
import java.math.BigDecimal;

import org.junit.Test;
/*
 * 继续玩转大数:
 * 
 * BigDecimal的用法和BigInteger非常类似,因为都是大数。
 * 因此也没有普通的数学运算符操作(+,-,*,/,%),所有这些操作都是通过函数
 * 来实现的,并且一般的函数参数也都是大数(BigDecimal或BigInteger对象)
 * 
 */

public class BigDecimalDemo {
	
	@Test//采用double会出现10个0.1相加结果不为1,这种近似运算方式经常不符合工程需要
	public void demo() {
		double sum = 0.0;
		for(int i=0;i<10;i++){
			sum +=0.1;
		}
		System.out.println(sum);
	}
	
	
	@Test//采用BigDecimal可以满足小数运算的工程需要
	public void demo2() {
		BigDecimal d = new BigDecimal(0);
		for(int i=0;i<10;i++){
			d = d.add( new BigDecimal(0.1) );
		}
		//scale指的是: 小数点后精确到几位
		d = d.divide( BigDecimal.valueOf(1), 2, BigDecimal.ROUND_HALF_UP);
		System.out.println(d);
	}
		@Test 
	public void demo3(){
		BigDecimal d=new BigDecimal(0);
		for(int i=0;i<10;i++){
			d=d.add(BigDecimal.valueOf(0.1));
		}
		System.out.println(d);
	}
	
	@Test 
	public void demo4(){
		BigDecimal d=new BigDecimal(0);
		for(int i=0;i<10;i++){
			d=d.add(new BigDecimal(0.1));
		}
		System.out.printf("%.1f",d);
		
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值