2017-06-12 4 views
0

java.math.BigDecimal generiert von dezimal string ist manchmal für setScale (n) aber manchmal nicht verfügbar.Kann "java.lang.ArithmeticException: Rounding needed" vor dem Runden erkannt werden?

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

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

Ich weiß, dass ich die Ausnahme auf geworfen fangen, aber ist es eine Möglichkeit, wenn Rounding notwendig ist oder nicht zu wissen, bevor setScale Aufruf?

Antwort

3

denken tun könnte ich Ihnen Standard für setScale Runden gesetzt, wie:

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

Sie eine Modulo von 1 [0,1, 0,001] und prüfen, ob die Erinnerung größer als 0

+0

Haben Sie das versucht? –

1

Sie können BigDecimal.scale aufrufen, wodurch die aktuelle Skalierung des BigDecimal zurückgegeben wird.

Der Aufruf setScale löst eine Ausnahme aus, wenn der Parameter kleiner als die aktuelle Skalierung ist.

+0

Aber 'setScale (int, RoundingMode)' nicht. –