Come ottengo NumberFormat.getCurrencyInstance()
per stampare valori di valuta USD negativi con segno meno?Formato importo negativo di USD con segno meno, non parentesi (Java)
risposta
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.
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.
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)
Prova:
NumberFormat.getCurrencyInstance(Locale.CANADA);
NumberFormat.getCurrencyInstance(Locale.UK);
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? –