Как использовать DecimalFormat для форматирования денег? - PullRequest
13 голосов
/ 21 декабря 2011

Вход выглядит как 8.7000000, и я хочу отформатировать его, чтобы он выглядел как 8.70 EUR. Я подумал об использовании DecimalFormat класса:

Double number = Double.valueOf(text);

DecimalFormat dec = new DecimalFormat("#.## EUR");
String credits = dec.format(number);

TextView tt = (TextView) findViewById(R.id.creditsView);
tt.setText(credits);

Результат 8.7 EUR. Как я могу указать форматеру две цифры после .?

Ответы [ 3 ]

28 голосов
/ 21 декабря 2011

Также хочу подчеркнуть здесь мысль Джона Скита об использовании целых чисел для хранения всей вашей валюты - не хочу иметь дело с ошибками округления с плавающей точкой с деньгами.

Используйте .00 вместо .## - 0 означает цифру, # означает цифру (но скрыть ее, если она равна нулю).

Double number = Double.valueOf(text);

DecimalFormat dec = new DecimalFormat("#.00 EUR");
String credits = dec.format(number);

TextView tt = (TextView) findViewById(R.id.creditsView);
tt.setText(credits);

Или использовать setMinimumFractionDigits:

Double number = Double.valueOf(text);

DecimalFormat dec = new DecimalFormat("#.## EUR");
dec.setMinimumFractionDigits(2);
String credits = dec.format(number);

TextView tt = (TextView) findViewById(R.id.creditsView);
tt.setText(credits);
4 голосов
/ 02 декабря 2013

Я нашел хорошее решение по этой ссылке ниже

http://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html

вкратце для обозначения такой валюты, как 92323345465.30, а 92,323,345,465.30 просто используйте ###, ###, ###, ###. 00

То есть, когда вы используете '0', то '0' будет либо заменено другой цифрой, либо, если для ее замены не будет цифры, ЭТО ОЖИДАЕТСЯ!Но если вы используете «#», тогда, если для замены «#» нет числа, то это место будет пустым.

Помните, что вы можете даже добавить свои собственные символы, такие как $, и т. Д. Передформатирование или даже после строки форматирования

2 голосов
/ 19 октября 2017

Я думаю, что хорошим вариантом будет следующий подход:

При использовании #,###.00 результат для значения 0.50 будет отображаться так:

$, 50

Однако, если вы используете #,##0.00, результат для того же значения будет:

$ 0,50

...