Come impostare il separatore delle migliaia in Java?
Ho una rappresentazione in formato stringa di un BigDecimal che desidero formattare con un separatore di migliaia e restituire come stringa.
Come impostare il separatore delle migliaia in Java?
Ho una rappresentazione in formato stringa di un BigDecimal che desidero formattare con un separatore di migliaia e restituire come stringa.
Risposte:
Dovrebbe funzionare (non testato, basato su JavaDoc):
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));
Secondo JavaDoc, il cast nella prima riga dovrebbe essere salvato per la maggior parte delle versioni locali.
getDecimalFormatSymbols()
dice: Returns: a copy of the desired DecimalFormatSymbols
. Quindi dovresti usarlo setDecimalFormatSymbols(theCopy)
dopo aver modificato la copia.
new
e riportarlo sul formatter: DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(decimalSeperator.charAt(0));
customSymbol.setGroupingSeparator(thousandSeperator);
formatter.setDecimalFormatSymbols(customSymbol);
È possibile utilizzare la funzione di formattazione con ",";
int no = 124750;
String str = String.format("%,d", no);
//str = 124,750
"," include caratteri di raggruppamento specifici della locale.
.
come separatore?
format()
con un locale esplicito ( Local.US
è noto per l'uso ,
come separatore) e quindi sostituire ,
con il separatore personalizzato: String.format(Locale.US, "%,d", n).replace(',', '.')
.
int
. O a long
. O a BigInteger
. E usa f se vuoi usare double
, float
o BigDecimal
.
BigDecimal bd = new BigDecimal(300000);
NumberFormat formatter = NumberFormat.getInstance(new Locale("en_US"));
System.out.println(formatter.format(bd.longValue()));
MODIFICARE
Per ottenere un separatore di raggruppamento personalizzato come spazio, procedere come segue:
DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance();
symbols.setGroupingSeparator(' ');
DecimalFormat formatter = new DecimalFormat("###,###.##", symbols);
System.out.println(formatter.format(bd.longValue()));
NumberFormat
oggetto con le proprietà desiderate e lo usi per formattare il tuo BigDecimal
. A BigDecimal
ha solo un valore specificato, non ha un formato specificato.
prova questo codice per formattare come usato in Brasile:
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"));
invia questo parametro per segnalare.
Se si utilizza il separatore delle migliaia per il tipo di dati Integer, utilizzare 1.
String.format ("%, d \ n", 58625) e l'output sarà 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);
NumberFormat nf = DecimalFormat.getInstance(myLocale);
DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(',');
customSymbol.setGroupingSeparator(' ');
((DecimalFormat)nf).setDecimalFormatSymbols(customSymbol);
nf.setGroupingUsed(true);
La risposta accettata deve essere davvero modificata altrimenti non funziona. Le getDecimalFormatSymbols rende una copia difensivo. Così,
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));
La nuova linea è questa: formatter.setDecimalFormatSymbols (simboli);
Per i decimali :
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));
Come accennato in precedenza, il seguente collegamento fornisce il codice paese specifico per consentire a Java di localizzare il numero. Ogni paese ha il suo stile.
Nel link sopra troverai il codice paese che dovrebbe essere inserito qui:
...(new Locale(<COUNTRY CODE HERE>));
La Svizzera ad esempio formatta i numeri come segue:
1000,00 -> 1'000,00
Per raggiungere questo obiettivo, i seguenti codici funzionano per me:
NumberFormat nf = NumberFormat.getNumberInstance(new Locale("de","CH"));
nf.setMaximumFractionDigits(2);
DecimalFormat df = (DecimalFormat)nf;
System.out.println(df.format(1000.00));
Il risultato è come previsto:
1'000.00
public String formatStr(float val) {
return String.format(Locale.CANADA, "%,.2f", val);
}
formatStr(2524.2) // 2,254.20