2012-11-09 11 views
5

io so come usare virgola nel printf come separatore di raggruppamento per stampare il valore in formato come 1,000,000.00Spazio come raggruppamento di separazione in printf

stampare in questo modo sto usando il comando

System.out.printf ("%,.2f", value);

ma come utilizzare lo spazio come separatore di raggruppamento per formattare il valore come 1 000 000.00

Ho provato a trovare la soluzione ma le soluzioni wi usando DecimalFormat guarda ora per complicarmi per me (livello principianti). C'è un modo semplice come nell'esempio con la virgola per farlo?

+1

hai provato% s –

+0

Per quanto ne so,% s è usato per stampare una stringa.Nell'esempio sopra voglio stampare il valore float ma in formato dove il separatore di raggruppamento è lo spazio – blekione

risposta

8

Risposte rapide:

String result = String.format("%,.2f", value).replace(".", " "); 
System.out.println(result); 

(supponendo che si sta utilizzando Java 1.5 o superiore).

Utilizzando DecimalFormat:

DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.getDefault()); 
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols(); 
String.format(symbols.getGroupingSeparator(), ' ') 

o meglio ancora:

symbols.setGroupingSeparator(' '); 
f = new DecimalFormat("###,###.00", symbols); 
System.out.println(f.format(value)); 
+0

Il primo metodo con '.replace()' funziona bene per me. Grazie – blekione

0

se volete farlo è necessario utilizzare il DecimalFormat questa sarebbe la soluzione

DecimalFormat f = new DecimalFormat ("# 0,000.00");

f.formato (13000);

Un po 'explenation qui: la quantità di zeri dopo la virgola vi darà la quantità di numeri del DecimalFormat inserirà un punto in là. La quantità di zeri dopo il punto è la quantità di decimali del DecimalFormat scriverà

EDIT: oh ho appena visto si voleva avere spazi in là:

perché f.format restituirà una stringa si può semplicemente aggiungere il .replace("\\.", " ");

Metodo. questo andrà a sostituire tutti i punti scritti in là con uno spazio

+0

Lo capisco e funziona bene ma per la virgola. Quando provo a cambiare la virgola nello spazio '' '' '# 0 000.00' non funziona. Mostra l'output senza raggruppare il separatore come '1000000.00' – blekione

+0

vedere le risposte di seguito, sono già stati introdotti nel DecimalFormatSymbols – SomeJavaGuy

+1

anche in questo modo ' DecimalFormat f = new DecimalFormat ("0,000.00"); DecimalFormatSymbols d = f.getDecimalFormatSymbols(); d.setGroupingSeparator (''); f.setDecimalFormatSymbols (d); Stringa t = f.formato (3000000); System.out.println (t); ' – SomeJavaGuy

1

Printf doesnt gestire questa situazione. Usa println insted. Esempio da oracle:

DecimalFormatSymbols unusualSymbols = new DecimalFormatSymbols(currentLocale); 
unusualSymbols.setDecimalSeparator('|'); 
unusualSymbols.setGroupingSeparator('^'); 

String strange = "#,##0.###"; 
DecimalFormat weirdFormatter = new DecimalFormat(strange, unusualSymbols); 
weirdFormatter.setGroupingSize(4); 

String bizarre = weirdFormatter.format(12345.678); 
System.out.println(bizarre); 

out : 1^2345|678 

Per convertire galleggiante di stringa:

println utilizza FloatingDecimal

printf usa FormattedFloatingDecimal

Ma io non avere il tempo di guardare più in profondità il motivo per cui queste classi sono diverse. Buona lettura :)

+0

"Weird" esempio ma penso di capirlo. Grazie – blekione

+0

+1: buon esempio – jalopaba