Java大数据BigInteger和BigDecimal

本文介绍了Java大数据中的BigInteger和BigDecimal类,用于处理长整数和长小数,以方法调用的方式保证精度。详细讲解了BigInteger的声明赋值和常用方法,以及BigDecimal的声明赋值、常用方法和特殊的除法规则,包括设置小数位数和舍入模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BigInteger和BigDecimal是以方法调用方式取代运算符方式来实现,等于是用速度换取了精度。

BigInteger(长整数)

BigInteger的常量
常量名称常量含义
BigInteger.ONE常量1(BigInteger类型常数)
BigInteger.TEN常量10(BigInteger类型常数)
BigInteger.ZERO常量0(BigInteger类型常数)

声明赋值

		String bigNum1 = "-5";
		// 将字符串类型转为BigInteger类型
		BigInteger big1 = new BigInteger(bigNum1);
		int bigNum2 = 3;
		// 将int类型转为BigInteger类型
		BigInteger big2 = BigInteger.valueOf(bigNum2);

常用方法

		// BigInteger的加法
		BigInteger bigAdd = big1.add(big2);
		// BigInteger的减法
		BigInteger bigSub = big1.subtract(big2);
		// BigInteger的乘法
		BigInteger bigMul = big1.multiply(big2);
		// BigInteger的除法,得出的结果为整数,建议除法使用BIgDecimal
		BigInteger bigDiv = big1.divide(big2);
		// 指数运算
		BigInteger bigPow = big1.pow(4);
		// 取余运算
		BigInteger bigRem = big1.remainder(big2);
		// 取绝对值
		BigInteger bigAbs = big1.abs();
		// 取相反数
		BigInteger bigNeg = big1.negate();
		// 比较大小,若bigCom为1,则big1大于big2,为0则相等,为-1,则小于big2
		int bigCom = big1.compareTo(big2);
		//将BigInteger转为double
		double num1 = big1.doubleValue();
		//将BigInteger转为float
		float num1Float = big1.floatValue();

 

BigDecimal(长小数)

BigDecimal的常量
常量名称常量含义
BigDecimal.ONE常量1(BigDecimal类型常数)
BigDecimal.TEN常量10(BigDecimal类型常数)
BigDecimal.ZERO常量0(BigDecimal类型常数)
ROUND_CEILING向正无穷方向舍入
ROUND_DOWN向零方向舍入
ROUND_FLOOR

向负无穷方向舍入

ROUND_HALF_DOWN向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
ROUND_HALF_EVEN

向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN

ROUND_HALF_UP向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6
ROUND_UNNECESSARY计算结果是精确的,不需要舍入模式
ROUND_UP向远离0的方向舍入

 

声明赋值

和BigInteger类似,有两种方法

		String bigNum1 = "5.6";
		BigDecimal big1 = new BigDecimal(bigNum1);
		double bigNum2 =2.3;
		BigDecimal big2 = BigDecimal.valueOf(bigNum2);2);

常用方法

除了除法规则以外其余和BIgInteger类似,如下所示:

		// BigDecimal的加法
		BigDecimal bigAdd = big1.add(big2);
		// BigDecimal的减法
		BigDecimal bigSub = big1.subtract(big2);
		// BigDecimal的乘法
		BigDecimal bigMul = big1.multiply(big2);

BigDecimal除法规则

BigDecimal.divide(BigDecimal divisor, int scale, RoundingMode roundingMode) ;

scale为小数位数,roundingMode为小数模式(舍/入模式),共有八种模式。

		// BigDecimal的除法使用规则
		BigDecimal bigD0 = new BigDecimal(-1);
		BigDecimal bigD1 = new BigDecimal(1);
		BigDecimal bigD10 = new BigDecimal(2);
		BigDecimal bigD2 = new BigDecimal(3);
		//向正无穷方向舍入
		BigDecimal bigDiv1 = bigD1.divide(bigD2,10,BigDecimal.ROUND_CEILING);
		System.out.println("1/3 向正无穷方向舍入:"+bigDiv1);
		//向零方向舍入
		BigDecimal bigDiv2 = bigD1.divide(bigD2,10,BigDecimal.ROUND_DOWN);
		System.out.println("1/3 向零方向舍入:"+bigDiv2);
		BigDecimal bigDiv3 = bigD0.divide(bigD2,10,BigDecimal.ROUND_DOWN);
		System.out.println("-1/3 向零方向舍入:"+bigDiv3);
		//向负无穷方向舍入ROUND_FLOOR
		BigDecimal bigDiv4 = bigD0.divide(bigD2,10,BigDecimal.ROUND_FLOOR);
		System.out.println("-1/3 向负无穷方向舍入:"+bigDiv4);
		//向距离近的一边舍入,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5,ROUND_HALF_DOWN
		//0.33333333333向0舍入,为0.3333333333
		BigDecimal bigDiv5 = bigD1.divide(bigD2,10,BigDecimal.ROUND_HALF_DOWN);
		System.out.println("1/3 向距离近的一边舍入:"+bigDiv5);
		//0.66666666666向1舍入,为0.6666666667
		BigDecimal bigDiv6 = bigD10.divide(bigD2,10,BigDecimal.ROUND_HALF_DOWN);
		System.out.println("2/3 向距离近的一边舍入:"+bigDiv6);
		//计算结果是精确的,不需要舍入模式,ROUND_UNNECESSARY,若为1/3,则会报错
		BigDecimal bigDiv7 = bigD2.divide(bigD1,10,BigDecimal.ROUND_UNNECESSARY);
		System.out.println("3/1 计算结果是精确的,不需要舍入模式:"+bigDiv7);
		//向远离0的方向舍入ROUND_UP
		BigDecimal bigDiv8 = bigD1.divide(bigD2,10,BigDecimal.ROUND_HALF_DOWN);
		System.out.println("1/3 向远离0的方向舍入:"+bigDiv8);
		BigDecimal bigDiv9 = bigD0.divide(bigD2,10,BigDecimal.ROUND_HALF_DOWN);
		System.out.println("-1/3 向远离0的方向舍入:"+bigDiv9);
		BigDecimal bigDiv10 = bigD10.divide(bigD2,10,BigDecimal.ROUND_HALF_DOWN);
		System.out.println("2/3 向远离0的方向舍入:"+bigDiv10);
		BigDecimal bigDiv11 = bigD10.divide(bigD2,10,BigDecimal.ROUND_HALF_DOWN);
		System.out.println("-2/3 向远离0的方向舍入:"+bigDiv11);


//计算结果
1/3 向正无穷方向舍入:0.3333333334
1/3 向零方向舍入:0.3333333333
-1/3 向零方向舍入:-0.3333333333
-1/3 向负无穷方向舍入:-0.3333333334
1/3 向距离近的一边舍入:0.3333333333
2/3 向距离近的一边舍入:0.6666666667
3/1 计算结果是精确的,不需要舍入模式:3.0000000000
1/3 向远离0的方向舍入:0.3333333333
-1/3 向远离0的方向舍入:-0.3333333333
2/3 向远离0的方向舍入:0.6666666667
-2/3 向远离0的方向舍入:0.6666666667

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值