Ich verwende DecimalFormat
, um mit Zahlenformaten aus verschiedenen Gebietsschemas umzugehen. Meine DecimalFormat
Variable deklariert wird, wie folgt:ClassCastException beim Umwandeln des Ergebnisses von DecimalFormat.parse(), wenn Dezimal 0 ist
NumberFormat m_nf;
DecimalFormat m_df;
if (strCountry.equals("IT") || strCountry.equals("ES"))
locale = java.util.Locale.ITALIAN;
else
locale = java.util.Locale.ENGLISH;
m_nf = NumberFormat.getInstance(locale);
m_nf.setMaximumFractionDigits(1);
m_df = (DecimalFormat) m_nf;
m_df.applyPattern(".0");
ich dann einen Wert von meiner Methode getLowerLimit()
zu erhalten und die Formatierung als String. Dies könnte entweder etwas wie "2.1" (im US-Format) oder "2.1" im italienischen Format sein. Der Wert wird dann als Double
unter Verwendung von DecimalFormat.parse()
gespeichert.
try {
String strValue = m_df.format(getLowerLimit());
Double nValue = (Double) m_df.parse(strValue);
} catch (ParseException | ClassCastException e) {
ErrorDialogGenerator.showErrorDialog(ExceptionConstants.LOWER_LIMIT, e);
System.exit(1);
}
Dieser Code arbeitet für mich OK, außer wenn die Dezimalstelle der Zahl ist 0. Zum Beispiel funktioniert es, wenn der Wert „2,1“ ist, aber nicht, wenn es „2.0“. Das ist, wenn es die folgende Ausnahme auslöst:
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Double
Warum funktioniert es nicht, wenn die Dezimalstelle eine 0 ist? Wie behebe ich das? Vielen Dank!
Dank, das war alles, was man braucht! – petehallw