2017-06-12 78 views
0

由十进制字符串生成的java.math.BigDecimal有时可用于setScale(n),但有时不可用。四舍五入之前是否可以检测到“java.lang.ArithmeticException:Rounding necessary”?

scala> BigDecimal("1.00000000").setScale(1) 
res0: scala.math.BigDecimal = 1.0 

scala> BigDecimal("1.00000001").setScale(1) 
java.lang.ArithmeticException: Rounding necessary 

我知道我能赶上扔到例外, 但有什么办法知道,如果四舍五入必要或不调用setScale过吗?

回答

3

我想你可以设置默认四舍五入setScale,如:

BigDecimal("1.00000001").setScale(1, scala.math.BigDecimal.RoundingMode.HALF_DOWN) 
0

您可以通过1 0.1,0.001]做模,并检查提示为大于0

+0

你试过吗? –

1

您可以拨打BigDecimal.scale,这将返回BigDecimal的当前比例。

如果参数小于当前比例,则调用setScale将引发异常。

+0

但'setScale(int,RoundingMode)'不。 –