BigDecimal的常用方法

大丈夫生居天地之间,岂能郁郁久居人下!

--------《三国演义》

在商业计算中,对数字精度要求高,我们可以用BigDecimal来处理这些问题。

(一)常用方法(加,减,乘,除)

BigDecimal b1 = new BigDecimal("6");
BigDecimal b2 = new BigDecimal("2");

//加
System.out.println(b1.add(b2)); //8
//减
System.out.println(b1.subtract(b2)); //4
//乘
System.out.println(b1.multiply(b2)); //12
//除
System.out.println(b1.divide(b2)); //3
//绝对值
System.out.println(b1.subtract(b2).abs()); //4

需要注意的是,我们在构造BigDecimal对象时,尽量不要使用double类型值去构造,否则会出现下面的问题

double d1=0.001;
BigDecimal d =new BigDecimal(d1);
System.out.println(d);

输出:

0.001000000000000000020816681711721685132943093776702880859375

 这里会输出一个比0.001大的值,所以不推荐使用double类型的值去构造。我们可以这样

double d1=0.001;
//用String.valueOf把d转换成String类型,再去构造。
BigDecimal d =new BigDecimal(String.valueOf(d1));
//这样输出的就是实际的值0.001
System.out.println(d); //0.001

(二)divide(÷)精度计算

BigDecimal b1 = new BigDecimal("1256");
BigDecimal b2 = new BigDecimal("1000");
//四舍五入保留两位小数
BigDecimal b3=b1.divide(b2,2,BigDecimal.ROUND_HALF_UP); //输出:1.26
//向上取整
BigDecimal b4=b1.divide(b2,BigDecimal.ROUND_UP); //输出:2
//向下取整
BigDecimal b5=b1.divide(b2,BigDecimal.ROUND_DOWN); //输出:1
//保留两位小数向上取整
BigDecimal b6=b1.divide(b2,2,BigDecimal.ROUND_UP); //输出:1.26


BigDecimal b7 = new BigDecimal("12.51");
//保留一位小数向上取整
BigDecimal b8=b7.setScale( 1,BigDecimal.ROUND_UP); 输出 12.6

BigDecimal b3=b1.divide(b2,2,BigDecimal.ROUND_HALF_UP);

divide除法中的三个参数分别表示: 第一个表示除数,第二个表示保留小数位数 ,第三个是取舍规则,这里的BigDecimal.ROUND_HALF_UP表示四舍五入。

 (三)BigDecimal.setScale()方法

BigDecimal b1 = new BigDecimal("1.265");
// 保留一位,向下取整
System.out.println(b1.setScale(1, BigDecimal.ROUND_DOWN)); // 输出:1.2
// 保留一位,向上取整
System.out.println(b1.setScale(1, BigDecimal.ROUND_UP)); // 输出:1.3
//四舍五入,保留一位小数
System.out.println(b1.setScale(1, BigDecimal.ROUND_HALF_UP)); // 输出:1.3

(四) BigDecimal的常量

// 常量 0
System.out.println(BigDecimal.ZERO); // 输出 0

 今天就写到这里啦,明天见!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值