【发布时间】:2021-01-11 14:05:46
【问题描述】:
当我尝试获取 longValueExact() 时:
BigDecimal bigDecimal = new BigDecimal(432.900).divide(new BigDecimal(1), 2, RoundingMode.FLOOR);
System.out.println(bigDecimal.longValueExact());
Exception in thread "main" java.lang.ArithmeticException: Rounding necessary
at java.math.BigDecimal.commonNeedIncrement(BigDecimal.java:4151)
at java.math.BigDecimal.needIncrement(BigDecimal.java:4207)
at java.math.BigDecimal.divideAndRound(BigDecimal.java:4115)
at java.math.BigDecimal.setScale(BigDecimal.java:2455)
at java.math.BigDecimal.longValueExact(BigDecimal.java:3093)
at com.tessi.bmd.specific.actil.utils.ActilUtils.main(ActilUtils.java:1281)
【问题讨论】:
-
是的,如果值不能用
long精确表示,那就是intended and documented behaviour。不确定您的问题是什么;如果您对舍入没问题,只需使用longValue而不是longValueExact。
标签: java bigdecimal