Non-terminating decimal expansion问题重新温习BigDecimal roundMode


BigDecimal除法运算出现java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result的解决办法

  今天在使用两个BigDecimal类型的数字做除法运算时,出现了一个如下的异常信息:

1 java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result

  上网查了一下这个异常的,找到了原因所在:通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. 
  解决的办法就是给divide方法设置精确的小数点,如:divide(xxxxx,2)。


对于常用的加,减,乘,除,BigDecimal类提供了相应的成员方法。

public BigDecimal add(BigDecimal value);//加法
public BigDecimal subtract(BigDecimal value); //减法
public BigDecimal multiply(BigDecimal value); //乘法
public BigDecimal divide(BigDecimal value); //除法


roundMode是指舍位时候的模式,传参数的时候用BigDecimal.ROUND_XXXX_XXX,   
 有:   
   一下例子是setScale(0,BigDecimal.ROUND_XXXX_XXX));的情况。如果保留小数位数不是零,如

setScale(2,BigDecimal.ROUND_XXXX_XXX)); 是 2,则 此数字的小数位数要大于2位。第三位才是要取舍得位。
 ROUND_CEILING:  舍位时往正无穷方向移动  1.1->2  1.5->2  1.8->2  -1.1->-1  -1.5->-1  -1.8->-1   
 ROUND_DOWN:向0的方向移动1.1->1  1.5->1  1.8->1  -1.1->-1  -1.5->-1  -1.8>-1   
 ROUND_FLOOR:与CEILING相反,往负无穷  1.1->1  1.5->1  1.8->1  -1.1->-2  -1.5->-2  -1.8->-2   
 ROUND_HALF_DOWN:以5为分界线,或曰五舍六入1.5->1  1.6->1  -1.5->-1  -1.6->-21.15->1.1  1.16->1.2 1.55->1.6 1.56->1.6
 ROUND_HALF_EVEN:同样以5为分界线,如果是5,则前一位变偶数1.15->1.2  1.16->1.2  1.25->1.2  1.26->1.3   
 ROUND_HALF_UP:最常见的四舍五入   
 ROUND_UNNECESSARY:无需舍位   
 ROUND_UP:与ROUND_DOWN,远离0的方向1.1->2  1.5->2  1.8->2  -1.1->-2  -1.5->-2  -1.8->-2   
    
 具体精确到几位因该采用   
  商=被除数.devide(除数,保留小数位数,精确方法)




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值