加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数操作(BigInteger类、BigDecimal类)

发布时间:2020-12-14 02:17:36 所属栏目:大数据 来源:网络整理
导读:BigInteger:支持任意精度的整数,可以精确地表示任意大小的整数值,同时在运算过程中不会丢失任何信息。 BigDecimal:可以精确地表示任意精度的小数,同时在运算过程中不会丢失任何信息,并且可以指定保留的小数位 数,进行精确的四舍五入 这两个类都位于ja
BigInteger:支持任意精度的整数,可以精确地表示任意大小的整数值,同时在运算过程中不会丢失任何信息。

BigDecimal:可以精确地表示任意精度的小数,同时在运算过程中不会丢失任何信息,并且可以指定保留的小数位数,进行精确的四舍五入

这两个类都位于java.math包中

一.BigInteger类

正常情况下一个整数最多只能放在long类型中,但是如果出现如:123455555555555555555555522222222这么大的数根本无法保存,所以为了解决这样的问题,java中引入了操作大数的操作类

*操作整数:BigInteger

*操作小数:BigDecimal

BigInteger类中的部分方法:


import java.math.BigInteger;
public class BigIntegerDemo01{
	public static void main(String[] args){
		BigInteger bi1 = new BigInteger("123456789");
		BigInteger bi2 = new BigInteger("987654321");
		System.out.println("加法操作:"+bi2.add(bi1));
		System.out.println("减法操作:"+bi2.subtract(bi1));
		System.out.println("乘法操作:"+bi2.multiply(bi1));
		System.out.println("除法操作:"+bi2.divide(bi1));
		System.out.println("求最大值:"+bi2.max(bi1));
		System.out.println("求最小值:"+bi2.min(bi1));
	}
}

可以看到上面的除法操作也不是精确的,所以可以使用BigInteger中的divideAndRemainder()方法

import java.math.BigInteger;
public class BigIntegerDemo01{
	public static void main(String[] args){
		BigInteger bi1 = new BigInteger("123456789");
		BigInteger bi2 = new BigInteger("987654321");
		System.out.println("加法操作:"+bi2.add(bi1));
		System.out.println("减法操作:"+bi2.subtract(bi1));
		System.out.println("乘法操作:"+bi2.multiply(bi1));
		System.out.println("求最大值:"+bi2.max(bi1));
		System.out.println("求最小值:"+bi2.min(bi1));
		BigInteger result[] = bi2.divideAndRemainder(bi1);
		System.out.println("除法操作:"+"商等于:"+result[0]+"余数等于:"+result[1]);
	}
}


二.BigDecimal类

BigDecimal方法也位于java.math包中

public class BigDecimal extends Number implements Comparable<BigDecimal>


其中,BigDecimal类中还有方法public double doubleValue() 将此 BigDecimal 转换为 double

下面看一下利用BigDecimal进行运算:

import java.math.BigDecimal;
class MyMath{
	public static double add(double d1,double d2){
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		return b1.add(b2).doubleValue();
	}
	public static double sub(double d1,double d2){
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		return b1.subtract(b2).doubleValue();
	}
	public static double mul(double d1,double d2){
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		return b1.multiply(b2).doubleValue();
	
	}
}
public class BigDecimalDemo{
	public static void main(String[] args){
		System.out.println("加法运算:"+MyMath.add(10.345,3.333));
		System.out.println("减法运算:"+MyMath.sub(10.345,3.333));
		System.out.println("乘法运算:"+MyMath.mul(10.345,3.333));	
	}
}

这里没有做除法,因为除法要四舍五入,下面我们具体看一下:

public BigDecimal divide(BigDecimal divisor,?int scale,?int roundingMode)

import java.math.BigDecimal;
class MyMath{
	public static double add(double d1,double d2){
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		return b1.multiply(b2).doubleValue();
	}
	public static double div(double d1,double d2,int len){
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	public static double round(double d,int len){
		BigDecimal b1 = new BigDecimal(d);
		BigDecimal b2 = new BigDecimal(1);
		return b1.divide(b2,BigDecimal.ROUND_HALF_UP).doubleValue();
	}
}
public class BigDecimalDemo{
	public static void main(String[] args){
		System.out.println("加法运算:"+MyMath.round(MyMath.add(10.345,3.333),1));
		System.out.println("减法运算:"+MyMath.round(MyMath.sub(10.345,3));
		System.out.println("乘法运算:"+MyMath.round(MyMath.mul(10.345,4));
		System.out.println("除法运算:"+MyMath.div(10.345,3.333,3));	
	}
}

参考资料:李兴华java视频讲解

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读