Ich habe einige Probleme beim Formatieren der Dezimalstellen eines Doubles. Wenn ich einen doppelten Wert habe, z. B. 4,0, wie formatiere ich die Dezimalstellen so, dass es stattdessen 4,00 ist?
Doppelte Dezimalformatierung in Java
Christoffer
Kosa
Einer der Wege wäre die Verwendung Zahlenformat.
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(4.0));
Ausgabe:
4.00
-
Ja, aber ich will kein Komma, ich will ein Dezimalzeichen.
– Christoffer
9. Oktober 2012 um 18:46 Uhr
-
Ich bekomme ein Komma. Das habe ich getan. “double variable; NumberFormat formatter = new DecimalFormat(“#0.00”); System.out.println(formatter.format(variable));
– Christoffer
9. Oktober 2012 um 18:53 Uhr
-
Sie erhalten ein Komma wegen der von Ihrer JVM verwendeten Standardsprache, die sich wahrscheinlich von denen von Nambari unterscheidet. Schauen Sie sich NumberFormat javadoc an: docs.oracle.com/javase/1.4.2/docs/api/java/text/…
– Michael Silbermann
9. Oktober 2012 um 18:54 Uhr
-
Wie zim2001 zeigte, könnte Ihr Gebietsschema anders sein. Lesen Sie den Link in meiner Antwort. Am Ende finden Sie Informationen dazu.
– kosa
9. Oktober 2012 um 18:57 Uhr
-
Optional möchten Sie möglicherweise ein weiteres Trennzeichen für Ziffern mit mehr als 3 vor dem Komma hinzufügen und dann Folgendes verwenden
NumberFormat formatter = new DecimalFormat("#,000.00"); System.out.println(formatter.format(4.0));
– José Mhlanga
27. August 2020 um 7:01 Uhr
Rohit Jain
Mit Java 8 können Sie verwenden format
Methode..: –
System.out.format("%.2f", 4.0); // OR
System.out.printf("%.2f", 4.0);
f
wird verwendet fürfloating
Punktwert..2
nach dem Komma bedeutet, Anzahl der Nachkommastellen.
Für die meisten Java-Versionen können Sie verwenden DecimalFormat
: –
DecimalFormat formatter = new DecimalFormat("#0.00");
double d = 4.0;
System.out.println(formatter.format(d));
Vincent Mimoun-Prat
Verwenden String.format:
String.format("%.2f", 4.52135);
Laut Dokumenten:
Das Gebietsschema, das immer verwendet wird, ist das von zurückgegebene
Locale.getDefault()
.
-
String.format akzeptiert auch ein Gebietsschema als ersten Parameter, um die Formatierung von Dezimalzeichen zu berücksichtigen.
– Vincent Mimoun-Prat
9. Oktober 2012 um 18:41 Uhr
-
Um gebietsschemaspezifische Dezimalzeichen (z. B. ein Komma) zu vermeiden, geben Sie das US-Gebietsschema an: String.format(Locale.US,”%.2f”, 4.52135);
– Alexander233
22. September 2017 um 20:16 Uhr
-
Ich würde sagen “um den US-Gebietsschema-spezifischen Punkt als Dezimalzeichen zu verwenden, geben Sie das US-Gebietsschema an”. Diese Vorstellung, dass die US-Gewohnheiten die richtigen sind und alles andere eine Art “Volks” -Zeug ist, macht mich verrückt.
– Simone Gianni
3. März 2018 um 12:05 Uhr
-
@SimoneGianni Mach keine dummen Annahmen, manche Leute brauchen vielleicht die Dezimalstelle, um ein Punkt zu sein. Zum Beispiel schreibe ich eine Funktion, die ein CSV-Dokument exportiert, und ich kann kein Komma haben, weil das Komma das Trennzeichen ist.
– Kaiser Keister
4. Mai 2020 um 0:26 Uhr
Mit String.format können Sie Folgendes tun:
double price = 52000;
String.format("$%,.2f", price);
Beachten Sie das Komma, das dies von der Antwort von @ Vincent unterscheidet
Ausgabe:
$52,000.00
Eine gute Ressource für die Formatierung ist die offiziell Java-Seite zum Thema
Lewis Robbin
Sie können immer die statische Methode verwenden printf from System.out
– Sie würden dann den entsprechenden Formatierer implementieren; das spart Heap-Platz, den Sie bei anderen Beispielen erledigen mussten.
Ex:
System.out.format("%.4f %n", 4.0);
System.out.printf("%.2f %n", 4.0);
Spart Heap-Platz, was ein ziemlich großer Bonus ist, dennoch bin ich der Meinung, dass dieses Beispiel viel überschaubarer ist als jede andere Antwort, zumal die meisten Programmierer die printf-Funktion von C kennen (Java ändert die Funktion/Methode jedoch geringfügig).
-
@Baz Fehlt mir hier ein entscheidendes Detail, es wird kein printStream erwähnt. Das OP bittet um Formatierungshilfe (die durch Betrachten der Java-Dokumentation einfacher gelöst werden könnte) für den Standardausgabestream. Erklären.
– Lewis Robbin
9. Oktober 2012 um 18:46 Uhr
-
Mein Fehler. Ich habe mir die falsche Javadoc-Version (1.4) angesehen. Übrigens:
out
ist derPrintStream
.– Baz
9. Oktober 2012 um 18:47 Uhr
-
@Baz Keine Sorge. Ja, ich bin davon ausgegangen, dass dies die Klasse ist, auf die Sie sich bezogen haben. In allen meinen Büchern wird printf als statische Methode aus System.out bezeichnet (da diese Methoden statisch sind).
– Lewis Robbin
9. Oktober 2012 um 18:47 Uhr
-
Um genau zu sein,
printf
ist eine statische Methode vonPrintStream
. Sehen Hier 😉 Aber trotzdem +1.– Baz
9. Oktober 2012 um 18:52 Uhr
-
@Baz Aus den Dokumenten hat die printStream-Klasse System.out geerbt. Ich könnte mich vielleicht irren – obwohl es ziemlich seltsam ist, eine statische Methode zu erben (ist das überhaupt möglich)? Sie sind, ich nehme an, aber richtig.
– Lewis Robbin
9. Oktober 2012 um 18:58 Uhr
Michael Silbermann
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));
-
@Baz Fehlt mir hier ein entscheidendes Detail, es wird kein printStream erwähnt. Das OP bittet um Formatierungshilfe (die durch Betrachten der Java-Dokumentation einfacher gelöst werden könnte) für den Standardausgabestream. Erklären.
– Lewis Robbin
9. Oktober 2012 um 18:46 Uhr
-
Mein Fehler. Ich habe mir die falsche Javadoc-Version (1.4) angesehen. Übrigens:
out
ist derPrintStream
.– Baz
9. Oktober 2012 um 18:47 Uhr
-
@Baz Keine Sorge. Ja, ich bin davon ausgegangen, dass dies die Klasse ist, auf die Sie sich bezogen haben. In allen meinen Büchern wird printf als statische Methode aus System.out bezeichnet (da diese Methoden statisch sind).
– Lewis Robbin
9. Oktober 2012 um 18:47 Uhr
-
Um genau zu sein,
printf
ist eine statische Methode vonPrintStream
. Sehen Hier 😉 Aber trotzdem +1.– Baz
9. Oktober 2012 um 18:52 Uhr
-
@Baz Aus den Dokumenten hat die printStream-Klasse System.out geerbt. Ich könnte mich vielleicht irren – obwohl es ziemlich seltsam ist, eine statische Methode zu erben (ist das überhaupt möglich)? Sie sind, ich nehme an, aber richtig.
– Lewis Robbin
9. Oktober 2012 um 18:58 Uhr
Subhrajyoti Majumder
new DecimalFormat("#0.00").format(4.0d);
Versuchen Sie es mit
String.format()
oderjava.text.Format
.– Code-Lehrling
9. Oktober 2012 um 18:39 Uhr
mögliches Duplikat von Nur zwei Stellen nach dem Dezimalzeichen anzeigen
– Raedwald
3. April 2014 um 12:06 Uhr
Mögliches Duplikat von Beste Möglichkeit, einen Double-Wert auf 2 Dezimalstellen zu formatieren
– Keal
21. Oktober 2015 um 2:11 Uhr