BigDecimal 除法运算提示:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact repres分析

阿里 阅读:170 2021-03-31 12:22:09 评论:0

业务场景

今天在计算重点工程总数占比工程总数(百分比)的时候,遇到一个错误:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact repres

异常产生的原因:

上述异常会发生在特定场景下,比如:1/3会得到一个无穷小数,这个时候需要定义计算结果要保留到小数点后几位,否则就会抛出上面的异常。

BigDecimal   除法介绍:

public BigDecimal divide(BigDecimal divisor) # 未指定保留小数位,会发生上述异常 
 
public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) # 指定保留小数位,不会发生上述异常.(推荐使用改方法)

BigDecimal   除法 实战:

public BigDecimal getBigDecimal(Integer total, Integer archiveTotal){ 
		// 精度源数据 
		BigDecimal a = new BigDecimal(total); 
		BigDecimal b = new BigDecimal(archiveTotal); 
		 
		BigDecimal c = b.divide(a, 4, BigDecimal.ROUND_HALF_UP); 
		 
		return c; 
	}

 

声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
排行榜
关注我们

一个IT知识分享的公众号