2016-05-24 13 views
-1

i int haben diese const:Guss BigDecimal Konst

int value = key.getCision().intValue(); 
switch (value) { 
    case PreEtat.IND: 
    //****** 
    break; 
    //**** 
    default: 
    break; 
} 

ich habe diesen Fehler für diese Linie:

public static final BigDecimal IND = BigDecimal.valueOf(1); 

ich es auf einer switch Aussage wie diese verwenden möchten case PreEtat.IND:

Fehler:

Type mismatch: cannot convert from BigDecimal to int 
+0

Schalter case-Anweisungen mit Dezimalzahlen Werte scheint eine schlechte Idee zu sein. Bevorzugen Sie Enums? –

+0

@ArnaudDenoyelle hast du bitte ein Beispiel – Mercer

Antwort

0

Per documentation:

A switch works with the byte, short, char, and int primitive data types. It also works with enumerated types (discussed in Enum Types), the String class, and a few special classes that wrap certain primitive types: Character, Byte, Short, and Integer (discussed in Numbers and Strings).

Die case PreEtat.IND in Ihrem switch bezieht sich auf eine BigDecimal Konstante, die nicht kompiliert werden.

Wahrscheinlich möchten Sie eine int Konstante initialisieren und testen, indem Sie intValue auf der BigDecimal Instanz aufrufen.

Bemerkenswert, Sie verlieren den Dezimalteil Ihrer Nummer, die den bedingten Test in Ihrem switch ein wenig seltsam macht.

2

können Sie versuchen, BigDecimal.intValue() zu verwenden:

Converts this BigDecimal to an int. This conversion is analogous to a narrowing primitive conversion from double to short as defined in the Java Language Specification: any fractional part of this BigDecimal will be discarded, and if the resulting "BigInteger" is too big to fit in an int, only the low-order 32 bits are returned. Note that this conversion can lose information about the overall magnitude and precision of this BigDecimal value as well as return a result with the opposite sign.