Wie setze ich Tausende Trennzeichen in Java?
Ich habe eine String-Darstellung eines BigDecimal, die ich mit einem Tausendertrennzeichen formatieren und als String zurückgeben möchte.
Wie setze ich Tausende Trennzeichen in Java?
Ich habe eine String-Darstellung eines BigDecimal, die ich mit einem Tausendertrennzeichen formatieren und als String zurückgeben möchte.
Antworten:
Dies sollte funktionieren (ungetestet, basierend auf JavaDoc):
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));
Laut JavaDoc sollte die Besetzung in der ersten Zeile für die meisten Gebietsschemas gespeichert sein.
getDecimalFormatSymbols()
sagt : Returns: a copy of the desired DecimalFormatSymbols
. Daher sollten Sie setDecimalFormatSymbols(theCopy)
nach dem Ändern der Kopie verwenden.
new
und auf Formatierer zurücksetzen: DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(decimalSeperator.charAt(0));
customSymbol.setGroupingSeparator(thousandSeperator);
formatter.setDecimalFormatSymbols(customSymbol);
Sie können die Formatierungsfunktion mit "," verwenden.
int no = 124750;
String str = String.format("%,d", no);
//str = 124,750
"," enthält länderspezifische Gruppierungszeichen.
.
als Trennzeichen verwenden möchte ?
format()
mit einem expliziten Gebietsschema auf ( Local.US
das bekanntermaßen ,
als Trennzeichen verwendet wird) und ersetzen Sie es ,
durch Ihr benutzerdefiniertes Trennzeichen : String.format(Locale.US, "%,d", n).replace(',', '.')
.
int
. Oder a long
. Oder a BigInteger
. Und verwenden Sie f, wenn Sie verwenden möchten double
, float
oder BigDecimal
.
BigDecimal bd = new BigDecimal(300000);
NumberFormat formatter = NumberFormat.getInstance(new Locale("en_US"));
System.out.println(formatter.format(bd.longValue()));
BEARBEITEN
Gehen Sie folgendermaßen vor, um ein benutzerdefiniertes Gruppentrennzeichen wie z. B. Leerzeichen zu erhalten:
DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance();
symbols.setGroupingSeparator(' ');
DecimalFormat formatter = new DecimalFormat("###,###.##", symbols);
System.out.println(formatter.format(bd.longValue()));
NumberFormat
Objekt mit den gewünschten Eigenschaften und formatieren damit Ihr Objekt BigDecimal
. A hat BigDecimal
nur einen bestimmten Wert, es hat kein bestimmtes Format.
Versuchen Sie diesen Code so zu formatieren, wie er in Brasilien verwendet wird:
DecimalFormat df = new DecimalFormat(
"#,##0.00",
new DecimalFormatSymbols(new Locale("pt", "BR")));
BigDecimal value = new BigDecimal(123456.00);
System.out.println(df.format(value.floatValue()));
// results: "123.456,00"
parameters.put("REPORT_LOCALE", new Locale("pt", "BR"));
Senden Sie diesen Parameter an den Bericht.
Wenn Sie ein Tausendertrennzeichen für den Datentyp Integer verwenden, verwenden Sie 1.
String.format ("%, d \ n", 58625) und die Ausgabe sind 58.625
DecimalFormatSymbols formatSymbols = new DecimalFormatSymbols();
formatSymbols.setDecimalSeparator('|');
formatSymbols.setGroupingSeparator(' ');
String strange = "#,##0.###";
DecimalFormat df = new DecimalFormat(strange, formatSymbols);
df.setGroupingSize(4);
String out = df.format(new BigDecimal(300000).doubleValue());
System.out.println(out);
Die akzeptierte Antwort muss wirklich geändert werden, sonst funktioniert sie nicht. Die getDecimalFormatSymbols erstellen eine defensive Kopie. So,
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));
Die neue Zeile lautet wie folgt: formatter.setDecimalFormatSymbols (Symbole);
Für Dezimalstellen :
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
DecimalFormat dfDecimal = new DecimalFormat("###########0.00###");
dfDecimal.setDecimalFormatSymbols(symbols);
dfDecimal.setGroupingSize(3);
dfDecimal.setGroupingUsed(true);
System.out.println(dfDecimal.format(number));
Wie oben erwähnt, erhalten Sie über den folgenden Link den spezifischen Ländercode, mit dem Java die Nummer lokalisieren kann. Jedes Land hat seinen eigenen Stil.
Unter dem obigen Link finden Sie den Ländercode, der hier eingegeben werden soll:
...(new Locale(<COUNTRY CODE HERE>));
Die Schweiz formatiert die Zahlen beispielsweise wie folgt:
1000.00 -> 1'000.00
Um dies zu erreichen, funktionieren folgende Codes für mich:
NumberFormat nf = NumberFormat.getNumberInstance(new Locale("de","CH"));
nf.setMaximumFractionDigits(2);
DecimalFormat df = (DecimalFormat)nf;
System.out.println(df.format(1000.00));
Ergebnis ist wie erwartet:
1'000.00
public String formatStr(float val) {
return String.format(Locale.CANADA, "%,.2f", val);
}
formatStr(2524.2) // 2,254.20