Попытка использовать DecimalFormat с Locale и переменными десятичными знаками - PullRequest
0 голосов
/ 16 января 2012

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

Мой базовый формат:

DecimalFormatSymbols dfs = new DecimalFormatSymbols();
String cur_syl = dfs.getCurrencySymbol().toString();

DecimalFormat df = new DecimalFormat(cur_syl+"0.00");                     
total.setText(df.format(line_total));

Это работает для меня и показывает правильный символ валюты для местного. Тем не менее, иногда дробная часть идет в более чем 2 места .. (из-за преобразования единиц измерения (оставляет очень маленькую часть). Дисплей показывает 0,00, если сумма действительно 0,005. Я хотел бы отображать только дополнительные десятичные разряды если там есть значения. Я не хочу показывать 0,0050000 только для учета сумм, которые меньше, чем один хундрет.

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

Я хотел бы отобразить цифры следующим образом:

.05 = $0.05
.005 = $0.005
.0005 = $0.0005

Если программа показывает: $ 0,0005 = $ 0,00, это будет выглядеть как ошибка.

Любая помощь будет принята с благодарностью ..

1 Ответ

2 голосов
/ 17 января 2012

Вот пример кода, использующего маску "#" для DecimalFormat. Маска "#" будет отображать число, только если оно существует в этом месте. Вы можете использовать его в левой части десятичной дроби также в формате, подобном #,##0.00. Таким образом, запятая будет отображаться только в том случае, если число достигнет тысяч, но в позиции один всегда будет отображаться 0.

double line_total0 = 0.5;
double line_total1 = 0.05;
double line_total2 = 0.005;
double line_total3 = 0.0000005;

DecimalFormatSymbols dfs = new DecimalFormatSymbols();
String cur_syl = dfs.getCurrencySymbol().toString();

DecimalFormat df = new DecimalFormat(cur_syl + "0.00############");
System.out.println(df.format(line_total0));
System.out.println(df.format(line_total1));
System.out.println(df.format(line_total2));
System.out.println(df.format(line_total3));

Выход:

$0.50
$0.05
$0.005
$0.0000005
...