2011-12-21 11 views
11

l'input è simile a 8.7000000 e desidero formattarlo in modo che assomigli a 8.70 EUR. Ho considerato utilizzando la classe DecimalFormat:Come utilizzare DecimalFormat per formattare i soldi?

Double number = Double.valueOf(text); 

    DecimalFormat dec = new DecimalFormat("#.## EUR"); 
    String credits = dec.format(number); 

    TextView tt = (TextView) findViewById(R.id.creditsView); 
    tt.setText(credits); 

Il risultato è 8,7 EUR. Come posso dire al formattatore di avere due cifre dopo lo ,?

+3

In generale, è consigliabile non utilizzare i tipi in virgola mobile a binario per memorizzare i valori di valuta in ogni caso. Usa BigDecimal o scala semplicemente un numero intero (ad esempio, un numero intero di centesimi). –

risposta

23

Desiderate inoltre evidenziare qui il punto di Jon Skeet sull'utilizzo dell'intero per archiviare tutta la vostra valuta: non volete avere a che fare con errori in virgola mobile in denaro.

uso, 00 invece di ## -. 0 significa una cifra, # significa una cifra (ma nasconderlo se è uguale a zero)

Double number = Double.valueOf(text); 

DecimalFormat dec = new DecimalFormat("#.00 EUR"); 
String credits = dec.format(number); 

TextView tt = (TextView) findViewById(R.id.creditsView); 
tt.setText(credits); 

o

uso setMinimumFractionDigits?

Double number = Double.valueOf(text); 

    DecimalFormat dec = new DecimalFormat("#.## EUR"); 
    dec.setMinimumFractionDigits(2); 
    String credits = dec.format(number); 

    TextView tt = (TextView) findViewById(R.id.creditsView); 
    tt.setText(credits); 
+0

perfetto, grazie! –

+0

Come apparirebbe il formato se ho 0.0600 come input e voglio 6,0 ct come output? –

+0

Avrei dovuto farlo nel codice temo - il formato decimale non avrebbe funzionato cambiando l'unità. Suppongo di avere una condizione 'if (val < 1 && val > 0) {// moltiplicare per 100 e utilizzare ct formatter} else {// usare eur formattatore} –

4

ho trovato una bella soluzione in questo link qui sotto

http://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html

in breve per rappresentare una valuta come 92323345465,30 come 92,323,345,465.30 basta usare ###, ###, ###, # ##. 00

Cioè, ogni volta che si usa '0', lo '0' sarà sostituito da un'altra cifra, o se non ci sono cifre da sostituire, allora APPARIRÀ! Ma si usa '#', quindi se non c'è un numero per sostituire il '#', allora quello spazio sarà vuoto.

Ricordate che è possibile anche aggiungere i tuoi propri simboli come $, ecc davanti alla formattazione o anche dopo la stringa di formattazione

2

penso che una buona opzione sarebbe questo aproach:

Utilizzando #,###.00 la il risultato per il valore di 0,50 verrà visualizzato in questo modo:

$, 50

Tuttavia, se si utilizza #,##0.00 il risultato per lo stesso valore sarebbe:

$ 0,50

Problemi correlati