Подтвердить что ты не робот

Как отформатировать значение Float в формате валюты устройства?

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

Например, в Европе вы должны написать:

1.000,95 €

В США я думаю, что вы напишете

1,000.95 $

В других валютах для десятичной дроби отображаются более или менее значения, в США - 2, но в Японии это будет 0.

Как я могу получить максимально возможный формат для всех существующих валют?

4b9b3361

Ответ 1

Я нашел решение. Класс NumberFormat содержит множество предопределенных форматировщиков. Существует также один для форматирования валютных значений.

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

NumberFormat format = NumberFormat.getCurrencyInstance();
((TextView) findViewById(R.id.text_result)).setText(format.format(result));

Ответ 2

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

NumberFormat format = NumberFormat.getCurrencyInstance(Locale.getDefault());
format.setCurrency(Currency.getInstance("CZK"));
String result = format.format(1234567.89);

result будет содержать следующие значения:

  • CZK1,234,567.89 с US locale
  • 1 234 567,89 Kč с чешским языком

Если вы хотите опустить десятичную часть для цен (покажите $199 вместо $199.00), вызовите это перед использованием форматирования:

format.setMinimumFractionDigits(0);

Все параметры перечислены в NumberFormat docs.

Ответ 3

Отъезд DecimalFormat.

Он имеет множество функций, предназначенных для возможности анализа и номера формата в любом регионе, включая поддержку для западных, арабских, или указательные цифры. Он также поддерживает различные вкусы чисел, включая целые числа ( "123" ), номера с фиксированной запятой ( "123,4" ), научные ( "1.23E4" ), проценты ( "12%" ), и валютные суммы ( "$ 123" ). Все эти ароматы могут быть легко локализованы.

Ответ 4

чтобы получить локаль устройства, вы можете использовать это:

@TargetApi(Build.VERSION_CODES.N)
    public static Locale getCurrentLocale(Context c) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            return c.getResources().getConfiguration().getLocales().get(0);
        } else {
            //noinspection deprecation
            return c.getResources().getConfiguration().locale;
        }

а затем сделать формат:

        double num = 1323.526;

        NumberFormat defaultFormat = NumberFormat.getCurrencyInstance(getCurrentLocale(getContext()));
        defaultFormat.format(num)