Valuta il formato senza simbolo di valuta

Sto usando NumberFormat.getCurrencyInstance(myLocale) per ottenere un formato di valuta personalizzato per un locale dato 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.

Fare un format.setCurrencySymbol(null) genera un’eccezione.

I seguenti lavori. È 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()); 

Puoi anche ottenere lo schema dal formato della valuta, rimuovere il simbolo della valuta e ribuild 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)); 

Impostalo invece con una stringa vuota:

 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 

c’è bisogno di un formato di valuta “SENZA il simbolo”, quando ottieni enormi report o visualizzazioni e quasi tutte le colonne rappresentano valori monetari, il simbolo è fastidioso, non c’è bisogno del simbolo ma sì per il separatore di migliaia e la virgola decimale. hai bisogno

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

e non

 new DecimalFormat("$#,##0.00"); 
 DecimalFormat df = new DecimalFormat(); df.setMinimumFractionDigits(2); String formatted = df.format(num); 

Funziona con molti tipi per num , ma non dimenticare di rappresentare la valuta con BigDecimal .

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

Forse possiamo usare solo la sostituzione o la sottostringa per prendere solo la parte numero della stringa formattata.

 NumberFormat fmt = NumberFormat.getCurrencyInstance(Locale.getDefault()); fmt.format(-1989.64).replace(fmt.getCurrency().getSymbol(), ""); //fmt.format(1989.64).substring(1); //this doesn't work for negative number since its format is -$1989.64