Ich habe eine Java-Anwendung erstellt, in der ich DecimalFormat verwende, um die Ausgabe für Zahlen zu formatieren.

DecimalFormat df = new DecimalFormat("#.##");      
return Double.parseDouble(df.format(costs));

Auf meinem Computer funktioniert es einwandfrei, aber wenn dieser Code auf einem anderen Computer ausgeführt wird, wird folgende Fehlermeldung angezeigt:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "25,1"
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)

Auf beiden Computern ist die neueste Java-Version installiert, beide sind Windows 7. Ein Computer ist 64-Bit, der andere 32-Bit. Was könnte der Grund dafür sein, dass der Fehler nur auf dem anderen Computer auftritt?

3
Batash 24 Dez. 2015 im 19:35

2 Antworten

Beste Antwort

Locales, mit einem Wort. Eine Maschine hat das europäische Format #,# und die andere US / UK #.#.

Bearbeiten: Verwenden Sie Ihr DecimalFormat-Objekt, um in beide Richtungen zu reisen: df.parse(...) analysiert den von df.format erstellten String.

5
GKFX 24 Dez. 2015 im 16:48

df.format(25.1) gibt die formatierte Nummer String basierend auf dem Standard- oder angegebenen Gebietsschema zurück.

dh für Locale.US wird String 25.1 zurückgegeben, während im Fall von Locale.ITALY 25,1 zurückgegeben wird, da die Dezimaltrennzeichen für unterschiedlich sind beide Gebietsschemas.

Ein weiteres Problem ist, dass Sie das formatierte String auf double analysieren. Wenn Sie den Wert double haben (oder eine andere gültige Nummer), müssen Sie die Nummer nicht mit DecimalFormat formatieren.

Wenn Sie eine gültige Nummer String (25.1) haben, können Sie diese wie folgt mit DecimalFormatter analysieren:

NumberFormat nf = NumberFormat.getNumberInstance(Locale.ITALY);
DecimalFormat df = (DecimalFormat) nf;
df.applyPattern("#.##");
try {
    System.out.println(df.parse("25,1"));
} catch (ParseException e) {
    e.printStackTrace();
}

AUSGABE

25.1
2
CoderCroc 30 Dez. 2015 im 06:36