从Java 11 BigDecimal文档:
当为MathContext
对象提供的精度设置为0(例如MathContext.UNLIMITED)时,算术运算是精确的,不带MathContext
对象的算术方法也是如此。(这是5之前的版本中唯一支持的行为。)
作为计算精确结果的必然结果,MathContext
不使用精度设置为0 的对象的舍入模式设置,因此不相关。在除法的情况下,精确的商可以具有无限长的十进制扩展;例如1除以3。
如果商具有不间断的十进制扩展数,并且指定了该操作以返回精确的结果,ArithmeticException
则将引发an 。否则,将返回除法的精确结果,就像其他操作一样。
要解决此问题,你需要执行以下操作:
a.divide(b, 2, RoundingMode.HALF_UP)
其中2是小数位数,RoundingMode.HALF_UP是四舍五入模式