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?
2 Antworten
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.
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
Neue Fragen
java
Java ist eine Programmiersprache auf hoher Ebene. Verwenden Sie dieses Tag, wenn Sie Probleme haben, die Sprache selbst zu verwenden oder zu verstehen. Dieses Tag wird selten alleine verwendet und wird am häufigsten in Verbindung mit [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] und [maven] verwendet.