Использование 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;
}