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

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

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

Вот примеры:

1234,56 -> $______1 234,56

0 -> $ __________ 0,00

1234567,89 -> $ 1 234 567,89

Где '_' представляет пространство еще там.

Благодарю.

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", что означает ровно два десятичных знака.

Если вы используете "#.##" (# означает "необязательная" цифра), он будет сбрасывать конечные нули - то есть новый 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));
    } 

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

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;
}
Другие вопросы по тегам