2011-12-28 11 views
44

Я использую NumberFormat.getCurrencyInstance(myLocale), чтобы получить собственный формат валюты для локали, заданной мной. Тем не менее, это всегда включает в себя символ валюты, который я не хочу, я просто хочу, чтобы соответствующий формат номера валюты для моей данной локали без символа валюты.Формат валюты без символа валюты

Двигаемся format.setCurrencySymbol(null) бросает исключение ..

+1

Вы пробовали '.setCurrencySymbol (" ")'? –

+0

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

+4

Когда нет необходимости в валюте, почему бы не использовать 'NumberFormat # getInstance (Locale)' ? – Robin

ответ

40

следующие работы. Это немного некрасиво, но он выполняет контракт:

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

Вы также могли бы получить образец от формата валюты, удалить символ валюты, а также реконструировать новый формат от новой модели:

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

Yep благодарит много, DecimalFormatSymbols сделал трюк, который я искал. – anderswelt

+0

Пока вы не используете отрицательные суммы, он снова отображает Символ. Я уверен, что это ошибка. –

35

Установите его с пустой строкой вместо:

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

, это тоже правильно, хотя может выбрать только один ответ, поскольку right one .. – anderswelt

+2

Я думаю, что дело в том, что написал Робин: «getCurrencyInstance» не нужно, просто используйте 'getNumberInstance' – AdrianRM

+0

. Думаю, вам также может понадобиться установить' formatter.setMinimumFractionDigits (2); 'в вашем втором примере , – JoshDM

2

есть a для формата валюты «БЕЗ символа», когда у вас есть огромные отчеты или представления, и почти все столбцы представляют собой денежные значения, символ раздражает, нет необходимости в символе, но да для разделителя тысяч и десятичная запятая. U нужно

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

и не

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

Это полезно только в том случае, если Locale - США, Канада, Австралия и т. Д. Это не работает для Sterling или Euro (где некоторые страны используют десятичные точки вместо запятых для разделителя тысяч). – vegemite4me

+2

Сообщение не об использовании периодов или запятых как тысяч разделителей, u отключено от темы – FiruzzZ

+0

Я все еще получаю для DecimalFormat df = new DecimalFormat ("#, ## 0.00"); Исключение в потоке "main" java.text.ParseException: Unparseable number: "$ 400.00" – Dejell

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

Работает со многими типами для num, но не забудьте represent currency with BigDecimal.

Для ситуаций, когда ваш num может иметь более двух цифр после десятичной точки, вы можете использовать df.setMaximumFractionDigits(2), чтобы показать только два, но это может скрыть только скрытую проблему от того, кто работает с приложением.

Смежные вопросы