2011-12-28 41 views
44

Sto utilizzando NumberFormat.getCurrencyInstance(myLocale) per ottenere un formato di valuta personalizzato per un locale fornito da me. Tuttavia, questo include sempre il simbolo di valuta che non voglio, voglio solo il formato del numero di valuta corretto per le mie impostazioni locali senza il simbolo di valuta.Formato valuta senza simbolo di valuta

Facendo un format.setCurrencySymbol(null) genera un'eccezione ..

+1

Hai provato '.setCurrencySymbol (" ")'? –

+0

@home: http://docs.oracle.com/javase/6/docs/api/java/text/DecimalFormatSymbols.html –

+4

Quando non è necessario per la valuta, perché non utilizzare 'NumberFormat # getInstance (Locale)' ? – Robin

risposta

40

i seguenti lavori. E 'un po' brutto, ma soddisfa il contratto:

NumberFormat nf = NumberFormat.getCurrencyInstance(); 
DecimalFormatSymbols decimalFormatSymbols = ((DecimalFormat) nf).getDecimalFormatSymbols(); 
decimalFormatSymbols.setCurrencySymbol(""); 
((DecimalFormat) nf).setDecimalFormatSymbols(decimalFormatSymbols); 
System.out.println(nf.format(12345.124).trim()); 

Si potrebbe anche ottenere il modello dal formato di valuta, rimuovere il simbolo di valuta, e ricostruire un nuovo formato dal nuovo modello:

NumberFormat nf = NumberFormat.getCurrencyInstance(); 
String pattern = ((DecimalFormat) nf).toPattern(); 
String newPattern = pattern.replace("\u00A4", "").trim(); 
NumberFormat newFormat = new DecimalFormat(newPattern); 
System.out.println(newFormat.format(12345.124)); 
+0

Sì, grazie mille, DecimalFormatSymbols ha fatto il trucco che stavo cercando .. – anderswelt

+0

Fino a quando non utilizzi importi negativi, quindi mostra di nuovo il simbolo. Sono sicuro che dev'essere un bug. –

35

Set con una stringa vuota invece:

DecimalFormat formatter = (DecimalFormat) NumberFormat.getCurrencyInstance(Locale.US); 
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols(); 
symbols.setCurrencySymbol(""); // Don't use null. 
formatter.setDecimalFormatSymbols(symbols); 
System.out.println(formatter.format(12.3456)); // 12.35 
+0

anche questo è ugualmente corretto, ma può scegliere solo una risposta come giusto uno .. – anderswelt

+2

Penso che il punto sia quello che ha scritto Robin: Non c'è bisogno di 'getCurrencyInstance', basta usare' getNumberInstance' – AdrianRM

+0

Penso che potresti anche dover impostare 'formatter.setMinimumFractionDigits (2);' nel tuo secondo esempio . – JoshDM

2

c'è un un bisogno per un formato di valuta "SENZA il simbolo", quando hai enormi rapporti o viste e quasi tutte le colonne rappresentano valori monetari, il simbolo è fastidioso, non c'è bisogno del simbolo ma sì per il separatore di migliaia e virgola decimale. U bisogno

new DecimalFormat("#,##0.00"); 

e non

new DecimalFormat("$#,##0.00"); 
+1

Questa funzione è utile solo se le impostazioni internazionali sono Stati Uniti, Canada, Australia, ecc. Non funziona in sterline o euro (dove alcuni paesi utilizzano i punti decimali anziché le virgole per il separatore delle migliaia). – vegemite4me

+2

Il post non riguarda l'utilizzo di punto o virgola come mille separatori, si è fuori tema – FiruzzZ

+0

Ottengo ancora per DecimalFormat df = new DecimalFormat ("#, ## 0.00"); Eccezione nel thread "main" java.text.ParseException: numero non variabile: "$ 400,00" – Dejell

0
DecimalFormat df = new DecimalFormat(); 
df.setMinimumFractionDigits(2); 
String formatted = df.format(num); 

funziona con molti tipi per num, ma non dimenticare di represent currency with BigDecimal.

Per le situazioni in cui il tuo num può avere più di due cifre dopo il punto decimale, è possibile utilizzare df.setMaximumFractionDigits(2) per mostrarne solo due, ma questo potrebbe nascondere solo un problema sottostante da chiunque stia eseguendo l'applicazione.

Problemi correlati