2014-10-13 9 views
0

У меня есть количествоКак отформатировать эту строку

Long amount=83000; 

Мне нужно отформатировать его в $83.000, как это сделать?

NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("en", "US")); 

String moneyString = formatter.format(amount); 

System.out.println(moneyString); 

Я получаю $83000.00, но я хочу, чтобы моя точка до 3 последней цифры

+1

нет я хочу $ 83,000, если сумма 67890, то выход будет $ 67,890, пожалуйста, помогите, если любая идея – Sushreesmita

+3

http://stackoverflow.com/questions/5323502/how-to-set-thousands-separator-in- java похож на дубликат –

+1

* * 83,8 тыс. долларов * вы имеете в виду 83 доллара или 83 * тысячи * долларов? – agad

ответ

-1

Должно работать:

DecimalFormatSymbols symbols = new DecimalFormatSymbols(new Locale("en", "US")); 
symbols.setDecimalSeparator(','); 
symbols.setGroupingSeparator('.'); 
DecimalFormat df = new DecimalFormat("$#,##0", symbols); 
System.out.println(df.format(83000L)); 
//$83.000 
+0

Почему дополнительный 0 в строке формата? Я думал, что это имело какой-то смысл, когда он был предварительно добавлен к строке - обеспечивая нулевые значения. – oligofren

+1

Без дополнительного 0 я получаю $ 8.30.00 – ToYonos

+0

Здесь точка будет перед 3-значным номером, но в этом методе точка будет перед каждой 3-значной цифрой. –

0

Вы используете неправильный класс. NumberFormatter даст локальное специфическое форматирование. Из API Docs:

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

Вы должны взглянуть на DecimalFormat, если вы собираетесь выводить одну и ту же строку независимо от текущей локали операционной системы.

Пути создания строки форматирования, такие как "$#,##0" и передавая экземпляр DecimalFormatSymbols, где вы установили группирования характер '.' вы добьетесь от предполагаемого выхода без хаков.

+0

@ToyOno имеет ответ ниже это объясняет. – oligofren

+0

Но для этого номера 8389000 его отображение o/p 8.389.000, есть ли способ удаления дополнительной точки после 8? – Sushreesmita

+0

Это дополнительное требование, отсутствующее в исходном вопросе. Кажется, что это обычай и, вероятно, не поддерживается DecimalFormat, поэтому вы можете просто использовать для него настраиваемое решение: просто удалите лишнюю точку из строки вручную. – oligofren

-2

Возможно, вы имели в виду это?

public static void main(String[] args) { 
    Long amount = 67890L; 
    NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("en", "US")); 
    String moneyString = formatter.format((double) amount/1000); 
    System.out.println(moneyString); 
} 

Этот код выведет:

$ 67,89

+1

.. не забывайте, что в вопросе говорится, что он хочет видеть '$ 67.890' (с точкой в ​​тысячах разделителей) – ljgw

+0

Я знаю.Но это может быть неправильное решение, так что я предложил здесь простейший и лучший, и поэтому я сказал: «Возможно, вы имели в виду это?» – shlomi33

+0

Что заставляет вас думать, что это неправильное решение? – ljgw

3

Это может помочь вам,

DecimalFormat myFormatter = new DecimalFormat("$###,###.###"); 
String output = myFormatter.format(amount); 
System.out.println(output); 
-2

Использование BigDecimal для форматирования вместо Long:

BigDecimal bd = BigDecimal.valueOf(amount, 3); 
NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("en","US")); 
formatter.setMinimumFractionDigits(3); 
String moneyString = formatter.format(bd);  
System.out.println(moneyString); 
+0

это напечатает: '$ 67,890.00' ... – ljgw

+0

Это крайне неэффективно, поскольку вы создаете новый BigDecimal для каждого номера исключительно для форматирование. Используя DecimalFormat, вы можете повторно использовать форматирование гораздо более эффективным (и менее хакерским) способом. – oligofren

+0

@ljgw см. Мой обновленный ответ – agad

0

Как насчет этого?

long num = 83000; 
DecimalFormat df = new DecimalFormat("##,###"); 
String toReplace = df.format(83000).toString(); 
System.out.println(toReplace.replace(",", ".")); 
Смежные вопросы