Gibt es eine Möglichkeit, eine Dezimalstelle wie folgt zu formatieren:
100 -> "100"
100.1 -> "100.10"
Wenn es sich um eine runde Zahl handelt, lassen Sie den Dezimalteil weg. Ansonsten mit zwei Dezimalstellen formatieren.
Gibt es eine Möglichkeit, eine Dezimalstelle wie folgt zu formatieren:
100 -> "100"
100.1 -> "100.10"
Wenn es sich um eine runde Zahl handelt, lassen Sie den Dezimalteil weg. Ansonsten mit zwei Dezimalstellen formatieren.
Ich bezweifle das. Das Problem ist, dass 100 niemals 100 ist, wenn es sich um einen Float handelt, normalerweise um 99,9999999999 oder 100,0000001 oder so ähnlich.
Wenn Sie es auf diese Weise formatieren möchten, müssen Sie ein Epsilon definieren, dh einen maximalen Abstand von einer Ganzzahl, und die Ganzzahlformatierung verwenden, wenn der Unterschied kleiner ist, und ansonsten einen Gleitkommawert.
So etwas würde den Trick machen:
public String formatDecimal(float number) {
float epsilon = 0.004f; // 4 tenths of a cent
if (Math.abs(Math.round(number) - number) < epsilon) {
return String.format("%10.0f", number); // sdb
} else {
return String.format("%10.2f", number); // dj_segfault
}
}
Ich würde empfehlen, das Paket java.text zu verwenden:
Dies hat den zusätzlichen Vorteil, dass es länderspezifisch ist.
Wenn Sie müssen, kürzen Sie den String, den Sie zurückerhalten, wenn es sich um einen ganzen Dollar handelt:
quelle
BigDecimal
mit einem Formatierer. joda-money.sourceforge.net sollte eine nette Bibliothek sein, die man verwenden kann, wenn es fertig ist.oder
Ausgabe
Wenn Sie kein Zeichen verwenden möchten, verwenden Sie diese Methode
quelle
Ich habe nach der Google-Suche keine gute Lösung gefunden. Veröffentlichen Sie einfach meine Lösung, damit andere darauf verweisen können. Verwenden Sie priceToString, um Geld zu formatieren.
quelle
"###,###,###.00"
zu ändern"###,###,##0.00"
, dass "0,00"Ja. Sie können java.util.formatter verwenden . Sie können eine Formatierungszeichenfolge wie "% 10.2f" verwenden.
quelle
String.format()
ist ein schöner statischer Wrapper dafür. Ich bin mir jedoch nicht sicher, warum Sie '10' verwenden.Ich benutze dieses (mit StringUtils von commons-lang):
Sie müssen sich nur um das Gebietsschema und den entsprechenden zu schneidenden String kümmern.
quelle
Ich denke, dies ist einfach und klar für das Drucken einer Währung:
Ausgabe: 12.345,68 USD
Und eine der möglichen Lösungen für die Frage:
Ausgabe:
100
100.10
quelle
Normalerweise müssen wir das Gegenteil tun. Wenn Ihr json-Geldfeld ein Float ist, kann es 3,1, 3,15 oder nur 3 sein.
In diesem Fall müssen Sie es möglicherweise für eine ordnungsgemäße Anzeige runden (und später eine Maske für ein Eingabefeld verwenden können):
quelle
dieser beste Weg, das zu tun.
100 -> 100,00
100,1 -> 100,10
quelle
Ausgabe:
Wenn Sie die Währung ändern möchten,
Ausgabe:
quelle
Sie sollten so etwas tun:
welche druckt:
100
100,10
quelle
Ich weiß, das ist eine alte Frage, aber ...
quelle
Sie können einfach so etwas tun und die ganze Zahl und dann die Cent danach eingeben.
quelle
Ich stimme @duffymo zu, dass Sie die
java.text.NumberFormat
Methoden für diese Art von Dingen verwenden müssen. Sie können tatsächlich alle Formatierungen nativ ausführen, ohne dass ein String Sie selbst vergleicht:Ein paar Punkte, auf die Sie hinweisen sollten:
Math.round(priceAsDouble * 100) % 100
arbeitet nur an den Ungenauigkeiten von Doppel- / Schwimmern. Wenn wir nur prüfen, ob wir auf den Hunderterplatz runden (vielleicht ist dies eine US-Tendenz), sind noch Cent übrig.setMaximumFractionDigits()
MethodeWas auch immer Ihre Logik für die Bestimmung ist, ob die Dezimalstellen abgeschnitten werden
setMaximumFractionDigits()
sollen oder nicht, sollte verwendet werden.quelle
*100
und%100
der US-Voreingenommenheit könnten SieMath.pow(10, formatter.getMaximumFractionDigits())
anstelle einer fest codierten100
Nummer die richtige Nummer für das Gebietsschema verwenden ...Wenn Sie an Währungen arbeiten möchten, müssen Sie die BigDecimal-Klasse verwenden. Das Problem ist, dass es keine Möglichkeit gibt, einige Gleitkommazahlen im Speicher zu speichern (z. B. können Sie 5.3456, aber nicht 5.3455 speichern), was sich auf schlechte Berechnungen auswirken kann.
Es gibt einen schönen Artikel über die Zusammenarbeit mit BigDecimal und Währungen:
http://www.javaworld.com/javaworld/jw-06-2001/jw-0601-cents.html
quelle
Format von 1000000,2 bis 1 000 000,20
quelle
Dieser Beitrag hat mir wirklich geholfen, endlich das zu bekommen, was ich will. Ich wollte hier nur meinen Code einbringen, um anderen zu helfen. Hier ist mein Code mit einigen Erklärungen.
Der folgende Code:
Wird zurückkehren:
Die eigentliche jeroensFormat () -Methode:
Die Methode displayJeroensFormat, die die Methode jeroensFormat () aufruft
Wird die folgende Ausgabe haben:
Dieser Code verwendet Ihre aktuelle Währung. In meinem Fall ist das Holland, daher ist die formatierte Zeichenfolge für mich anders als für jemanden in den USA.
Beobachten Sie einfach die letzten 3 Zeichen dieser Zahlen. Mein Code hat eine if-Anweisung, um zu überprüfen, ob die letzten 3 Zeichen gleich ", 00" sind. Um dies in den USA zu verwenden, müssen Sie dies möglicherweise in ".00" ändern, wenn es noch nicht funktioniert.
quelle
Ich war verrückt genug, um meine eigene Funktion zu schreiben:
Dadurch wird die Ganzzahl in das Währungsformat konvertiert (kann auch für Dezimalstellen geändert werden):
quelle
quelle
Dies habe ich getan, indem ich stattdessen eine Ganzzahl verwendet habe, um den Betrag als Cent darzustellen:
Das Problem dabei
NumberFormat.getCurrencyInstance()
ist, dass man manchmal wirklich möchte, dass 20 $ 20 $ sind, es sieht einfach besser aus als 20,00 $.Wenn jemand mit NumberFormat einen besseren Weg findet, bin ich ganz Ohr.
quelle
Für die Leute, die die Währung formatieren möchten, aber nicht möchten, dass sie auf lokal basiert, können wir dies tun:
quelle