Использование DecimalFormat для форматирования строки валюты в Java

Мне нужно взять строку, содержащую двойное число (что-то вроде 14562.34), и отформатировать ее так, чтобы она выглядела как $000,000,00#.##-. Я имею в виду, что $ будет полностью слева, 0 выше не будут отображаться, если числа нет, но я хочу, чтобы пробел был там. #s будут цифрами, и мне нужно как минимум 0,00, чтобы показать, если число равно нулю. «-» появится, если число отрицательное (хотя я считаю, что это то, что я могу добавить в конце без форматирования). Когда я пытаюсь сделать "000,000,00#.##" для средства форматирования, я получаю искаженное исключение.

У кого-нибудь есть советы, как это сделать или что я делаю неправильно?

Вот примеры:

1234.56 -> $______1,234.56

0 -> $__________0.00

1234567.89 -> $__1,234,567.89

Где «_» представляет собой пробел.

Спасибо.


person Klassic_K    schedule 22.12.2015    source источник
comment
Я думаю, что этот вопрос отвечает на то, что вы ищете (stackoverflow.com/questions/13791409/)   -  person Pritam Banerjee    schedule 22.12.2015
comment
Возможный дубликат Использование BigDecimal для работы с валютами   -  person Abdelhak    schedule 22.12.2015


Ответы (2)


public static void main(String[] args) throws ParseException {
String data = "1234.6";
DecimalFormat df = new DecimalFormat("$0,000,000,000.00");
System.out.println( df.format(Double.parseDouble(data)));
}

Обратите внимание на «00», что означает ровно два десятичных знака.

Если вы используете "#.##" (# означает "необязательную" цифру), в конце будут отброшены нули - т.е. new DecimalFormat("#.##").format(3.0d); печатает только "3", а не "3.00".

Редактировать:-

Если вам нужен пробел вместо нуля, вы можете использовать для этого метод String.format(). Если размер десятичного числа больше, чем максимальный размер начального нуля, верните число двойного анализа со знаком доллара, в противном случае добавьте начальный пробел.

Здесь длина — это максимальный размер до добавления пробела, после чего начальный пробел игнорируется.

public static String leadingZeros(String s, int length) {
    if (s.length() >= length) return String.format("$%4.2f",Double.valueOf(s));
    else 
        return String.format("$%" + (length-s.length()) + "s%1.2f",  " ",Double.valueOf(s));
    } 
person Naruto    schedule 22.12.2015
comment
Обновлен ответ для начального пробела вместо начального нуля. - person Naruto; 22.12.2015

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

public String getFormattedCurrencyValue(String number){

   BigDecimal num = new BigDecimal(number);
   NumberFormat nf = NumberFormat.getCurrencyInstance(locale);
   Currency currency = nf.getCurrency();

   String str = StringUtil.replace(
            nf.format(number),
            nf.getCurrency().getSymbol(locale),
            "",false).trim();

   return currency.getCurrencyCode()+str;
}
person AnthonyJClink    schedule 22.12.2015