BigDemical常见用法、运算、保留精度

用于需要精确计算的结果;
BigDecimal所创建的是对象

1.常见构造函数

  • BigDecimal(int)
  • BigDecimal(double)
  • BigDecimal(long)
  • BigDecimal(String)
    注意:参数类型为double的构造方法的结果有一定的不可预知性,所以通常建议优先使用String构造方法。

2.加减乘除方法

  • add(BigDecimal) 相加
  • subtract(BigDecimal) 相减
  • multiply(BigDecimal) 相乘
  • divide(BigDecimal) 相除
    注意:
    除法时可能会出现无限循环小数,此时就会抛出异常:
    java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
    要设置精度divide(BigDecimal,2)

3.常见的值转换

  • toString() 转换成字符串
  • doubleValue() 转换成双精度数
  • floatValue() 转换成单精度数
  • longValue() 转换成长整数
  • intValue() 转换成整数

4.大小比较 compareTo()

int a = bigdemical.compareTo(bigdemical2)

返回结果:

a = -1, 表示bigdemical 小于 bigdemical2;
a = 0,  表示bigdemical 等于 bigdemical2;
a = 1,  表示bigdemical 大于 bigdemical2;

注意:

  • 通常作为判断条件时与0进行比较,例如,if(a.compareto(b) < 0){…}
  • 与0比较适合使用 bigdemical.compareto(BigDemical.Zero)

5.保留精确度,进行四舍五入 setScale(num,round)

建议,使用字符串格式构造,不会损失精度 BigDecimal num = new BigDecimal(“2.222222”);
1.ROUND_UP = 0

// 进位处理,不管后面数字的大小
BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_UP);

2.ROUND_DOWN = 1

// 去掉多余的位数,不管后面数字的大小
BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_DOWN);

3.ROUND_CEILING = 2

// 如果是正数,相当于BigDecimal.ROUND_UP;如果是负数,相当于BigDecimal.ROUND_DOWN
BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_CEILING);
BigDecimal b = new BigDecimal("-2.222222").setScale(2, BigDecimal.ROUND_CEILING);

4.ROUND_FLOOR = 3

// 如果是正数,相当于BigDecimal.ROUND_DOWN;如果是负数,相当于BigDecimal.ROUND_UP
BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_FLOOR);
BigDecimal b = new BigDecimal("-2.222222").setScale(2, BigDecimal.ROUND_FLOOR);

5. ROUND_HALF_UP = 4

// 根据后面的数字四舍五入(大于等于 5进位)
BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_HALF_UP);

6. ROUND_HALF_DOWN = 5

// 根据后面的数字四舍五入(大于 5进位)
BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_HALF_DOWN);

7. ROUND_HALF_EVEN = 6

// 如果舍弃部分左边的数字为偶数,则作 ROUND_HALF_DOWN;反之
BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_HALF_EVEN);
BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_HALF_EVEN);

8. ROUND_UNNECESSARY = 7

// Scale位数 必须小于等于 小数位数,否则会抛异常:
BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_HALF_UNNECESSARY);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值