2010-01-13 12 views

risposta

21

Qui è uno finisco sempre utilizzando sia in una classe Java o tramite il fmt: tag JSTL formatNumber:

DecimalFormat format = new DecimalFormat("$#,##0.00;$-#,##0.00"); 
String formatted = format.format(15.5); 

produce sempre almeno un $ 0,00 e è coerente quando visualizzato. Comprende anche migliaia di separatori dove necessario. È possibile spostare il segno meno davanti al segno del dollaro se questo è il tuo requisito.

2

Probabilmente è meglio creare il proprio DecimalFormat se si desidera un formato specifico anziché fare affidamento sull'impostazione predefinita.

Edit: Si potrebbe forse anche il cast del risultato di NumberFormat.getCurrencyInstance() per DecimalFormat e adattarlo alle proprie preferenze.

+0

Probabilmente avete ragione, ma la mia domanda dovrebbe essere in grado di f ormat currency in may locales. Non sarebbe troppo difficile implementare la formazione per tutti quei locali? –

30

Richiede un piccolo ritocco del DecimalFormat restituito da NumberFormat.getCurrencyInstance() per farlo in modo indipendente dalla locale. Ecco quello che ho fatto (testato su Android):

DecimalFormat formatter = (DecimalFormat)NumberFormat.getCurrencyInstance(); 
String symbol = formatter.getCurrency().getSymbol(); 
formatter.setNegativePrefix(symbol+"-"); // or "-"+symbol if that's what you need 
formatter.setNegativeSuffix(""); 

IIRC, Currency.getSymbol() non può restituire un valore per tutte le impostazioni per tutti i sistemi, ma dovrebbe funzionare per i più grandi (e penso che ha un ripiego ragionevole proprio, quindi non dovreste avere a che fare nulla)

1

Prova:

NumberFormat.getCurrencyInstance(Locale.CANADA);

0
NumberFormat.getCurrencyInstance(Locale.UK);