我以前使用过 BigDecimals,但不经常使用,今天早上我正在做一些事情,但我不断收到以下异常:
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion;
no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1594)
我试图设置比例并使用舍入来消除问题,如下所示:
BigDecimal bd1 = new BigDecimal(1131).setScale(2,BigDecimal.ROUND_HALF_UP);
BigDecimal bd2 = new BigDecimal(365).setScale(2,BigDecimal.ROUND_HALF_UP);
BigDecimal bd3 = bd1.divide(bd2).setScale(2,BigDecimal.ROUND_HALF_UP);
System.out.println("result: " + bd3);
但是,我不断遇到同样的异常。有人能告诉我我在哪里犯了错误吗?
非终止小数需要四舍五入
使用时divide https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/math/BigDecimal.html#divide(java.math.BigDecimal,java.math.MathContext)你应该使用MathContext https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/math/MathContext.html with RoundingMode https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/math/RoundingMode.html以防精确结果有无限位数的小数。
这就是你的情况:
MathContext mc = new MathContext(2, RoundingMode.HALF_UP) ;
BigDecimal bd3 = bd1.divide(bd2, mc);
或者致电divide https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/math/BigDecimal.html#divide(java.math.BigDecimal,java.math.RoundingMode)使用舍入模式来使用分子的刻度(bd1
在下面的例子中):
BigDecimal bd3 = bd1.divide(bd2, RoundingMode.HALF_UP);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)