大数字运算——2、BigDecimal

package com.wh.BigInteger;

import java.math.BigDecimal;
import java.util.Arrays;

/**
 * @author 王恒
 * @datetime 2017年4月6日 下午3:08:18
 * @description  大数字运算
 * 
 */
public class TestBigDecimal {
	public static void main(String[] args) {
		BigDecimal b1 = new BigDecimal("11111111111111111111111111111");
		BigDecimal b2 = new BigDecimal("22222222222222222222222222222");
		BigDecimal b3 = new BigDecimal("1000");
		
		//相加
		System.out.println(b1.add(b2));  
		//减去
		System.out.println(b1.subtract(b2));
		//相乘
		System.out.println(b1.multiply(b2));
		//相除
		System.out.println(b2.divide(b3)); 
		System.out.println(b2.divide(b3,1,BigDecimal.ROUND_UP)); 
		System.out.println(b2.divide(b3,2,BigDecimal.ROUND_DOWN)); 
		System.out.println(b2.divide(b3,2,BigDecimal.ROUND_CEILING)); 
		//取余
		System.out.println("remainder:   "+b2.remainder(b3));   
		
		/**
		 * divide(BigDecimal divisor, int scale,int roundingMode)    scale:保留小数位数        roundingMode:舍入模式
		 * 包括
		 * 
		 * ROUND_UP:舍入远离零的舍入模式。在丢弃非零部分之前始终增加数字。注意,此舍入模式始终不会减少计算值的大小。 (向上增加)
		 * ROUND_DOWN:接近零的舍入模式。在丢弃某部分之前始终不增加数字(即截短)。注意,此舍入模式始终不会增加计算值的大小。(向下减少	)
		 * 
		 * ROUND_CEILING:接近正无穷大的舍入模式。如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;如果为负,则舍入行为与 ROUND_DOWN 相同。注意,此舍入模式始终不会减少计算值。 (联想到天花板)
		 * ROUND_FLOOR:接近负无穷大的舍入模式。如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;如果为负,则舍入行为与 ROUND_UP 相同。注意,此舍入模式始终不会增加计算值。(联想到地板)
		 * 
		 * ROUND_HALF_UP:向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。如果舍弃部分 >= 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。注意,这是我们大多数人在小学时就学过的舍入模式。 
		 * ROUND_HALF_DOWN:向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。如果舍弃部分 > 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。
		 * ROUND_HALF_EVEN:向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同;如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。注意,在重复进行一系列计算时,此舍入模式可以将累加错误减到最小。 
		 * 
		 * 
		*/
		
		//compareTo     将此 BigDecimal 与指定的 BigDecimal 比较。
		System.out.println("compareTo()  "+b1.compareTo(b2));
		
		//divideAndRemainder
		System.out.println("divideAndRemainder()  "+Arrays.toString(b1.divideAndRemainder(b2)));
		
		//doubleValue()   将此 BigDecimal 转换为 double
		System.out.println(b2.doubleValue());
		
		//max、min、toBigInteger、valueOf、toString、pow、negate
	}
}


运行结果:

33333333333333333333333333333
-11111111111111111111111111111
246913580246913580246913580241975308641975308641975308642
22222222222222222222222222.222
22222222222222222222222222.3
22222222222222222222222222.22
22222222222222222222222222.23
remainder:   222
compareTo()  -1
divideAndRemainder()  [0, 11111111111111111111111111111]
2.2222222222222224E28

  

转载于:https://www.cnblogs.com/1020182600HENG/p/6673944.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值