Java大数处理

Java关于大数处理Java.math里面有两个类:BigInteger 和 BigDecimal.前者是大整数处理,后者是高精度处理。其实两者的使用方法都是十分类似的,他们没有普通的数学运算符操作(+,-,*,/,%),所有这些操作都是通过函数来实现的,并且一般的函数参数也都是大数(BigDecimal或BigInteger对象)。

BigInteger的使用:

	//求阶乘
	@Test
	public void test1(){
		BigInteger bigInteger = new BigInteger("1");
		for (int i = 1; i < 600; i++) {
			bigInteger = bigInteger.multiply(BigInteger.valueOf(i));
		}
		System.out.println(bigInteger);
	}

这里就展示乘法的使用,加法是add(),减法是delete(),除法是subtract(),使用方法十分简单,调用的时候里面可以new 对象,也可以使用valueOf()

BigDecimal的使用:

	@Test
	public void test1(){
		BigDecimal b = new BigDecimal(0);
		for (int i = 0; i < 10; i++) {
			b = b.add(new BigDecimal(0.1));
		}
		System.out.println(b);
		//1.0000000000000000555111512312578270211815834045410156250
	}
	

观察输出可以知道,就算是高精度的处理也有她的局限性,但其实办法总比困难多的,请看下文:

	@Test
	public void test2(){
		BigDecimal b = new BigDecimal(0);
		for (int i = 0; i < 10; i++) {
			b = b.add(new BigDecimal(0.1));
		}
		System.out.printf("%.1f",b);
		//1.0
	}
	
	@Test
	public void test3(){
		BigDecimal b = new BigDecimal(0);
		for (int i = 0; i < 10; i++) {
			b = b.add(BigDecimal.valueOf(0.1));//没有后面的多余数据
		}
		System.out.println(b);
		//1.0
	}

我也有在网上看过别人写的方法,用的是API里面的scale,或者是DecimalFormat,都很麻烦,建议计算的时候使用下面这两种方法,至于为什么new BifDecimal 和 valueOf()两种方法的区别原由,可以通过看API知道,后者是使用了toString的方法,所以使用valueOf的时候数据转换为bigDecimal的时候是精确的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值