Benutzerdefinierte formatierte Zahl mit Punkt und Komma
Etwas im Zusammenhang zu diese Frage und einige andere Fragen in Bezug auf die Formatierung Dezimalzahlen (alle, die nicht mir helfen, in diesem Fall).
Ich versuche zu formatieren, die Lange in einem String z.B. 123456 -> 012.345,6 (Periode, gefolgt von Komma so seltsam, wie es scheinen mag, es ist ein Projekt, Anforderung).
Ich bin das Experimentieren mit DecimalFormat für die Formatierung:
private static final DecimalFormat format = new DecimalFormat("##0.000,0");
Allerdings wirft es eine Ausnahme bei der Instanziierung:
java.lang.IllegalArgumentException: Malformed Muster "##0.000,0"
Habe ich experimentierte auch mit ändern der Ländereinstellungen ein EU-system vorher z.B.
NumberFormat numberFormat = NumberFormat.getNumberInstance(Gebietsschema.DEUTSCH);
Wie kann ich formatieren von zahlen in dieser Weise? Ist DecimalFormat die falsche Lösung? Kann ich mit einer NumberFormat? Oder muss ich eine benutzerdefinierte formatter?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie vermeiden, den Bau
DecimalFormat
direkt. Kommas sind immer verwendet für die Gruppierung in die pattern-definition, unabhängig davon, wie Sie erscheinen in der Ziel-locale. Ebenso sind Zeiten der immer für Dezimalzahlen. Dies scheint unlogisch, aber man muss sich erinnern, dieses ist ein Muster definition, und wie # diese Zeichen beschreiben einen Ersatz, nicht der Charakter selbst.Die division durch 10 ist notwendig, um eine Ziffer nach dem Dezimalpunkt.
Sorry, wenn ich vermisst werde deine Anfrage, aber wenn Sie einen nicht-standard-Zahl-Darstellung, dann schreiben Sie bitte eine formatter einfach genug:
Drucke "012.345,6"
http://docs.oracle.com/javase/6/docs/api/java/text/DecimalFormat.html
lassen Sie uns versuchen, diese
new DecimalFormat("0##,###.0");
erinnern, Kommata sind Trennzeichen, Punkte Fraktionen. Sie kann nicht schalten Sie die beiden herum.
Diesem format gedruckt wird die führende null, zwei wichtige Ziffern, dann drei Ziffern, dann die Fraktion, oder 0, wenn es eine Runde Zahl. Ich denke.
So, das beste was Sie bekommen können
123456-> 012,345.6
Problemumgehung:
Können Sie die
DecimalFormatSymbols
- Klasse, um die Gruppierung und Dezimaltrennzeichen zu jedem Zeichen, das Sie wollen.Ein Beispiel ist gezeigt in der Java-tutorials (in der Änderung der Formatierung Symbole Abschnitt): http://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html
In das Muster selbst Gruppierung ist immer gekennzeichnet durch eine
,
- und der dezimal-Punkt durch eine.
.Nach meinem Lesen der javadoc, DecimalFormat unterstützt nur die "Gruppierung" in den ganzzahligen Teil einer Zahl, d.h. den Teil vor der Dezimalstelle.
Diese ist implizit durch die syntax der format-string in die
','
ist nur erlaubt, bevor der'.'
.Ist es auch impliziert die javadoc für
setGroupingSize(int)
was sagt