0

Форматирование валют в иностранных локалях на Java

107

Я стараюсь найти способ форматировать иностранные валюты для различных регионов, которые не являются стандартными для этой валюты, используя Java. Я нашел класс java.util.Currency, который может представлять правильный символ для различных регионов. Например, для USD он предоставляет символ $ в США и US$ или USD в других странах. Также я нашел класс java.text.NumberFormat, который форматирует валюту для конкретного региона.

Моя проблема заключается в том, что util.Currency предоставляет правильные символы и коды для представления валют в их нестандартных локалях, но не форматирует валюту специфическим образом для конкретной локали. NumberFormat предполагает, что число, которое я ему передаю с указанием локали, является валютой этой локали, а не иностранной валютой.

Например, если я использую getCurrencyInstance(Locale.GERMANY) и затем форматирую (1000), он предполагает, что я форматирую 1000 евро. На самом деле, мне может потребоваться правильно локализованное представление (правильный разделитель десятичных и тысячных, а также размещение символа до или после суммы) для USD, иены или любой другой валюты. Лучшее, что мне удалось сделать до сих пор, это отформатировать число с помощью NumberFormat, затем искать в выводе недобуквенные символы и заменять их символами, полученными из util.Currency. Однако этот подход очень ненадежен и, вероятно, недостаточно точен для моих целей.

Есть ли идеи по этому поводу? Буду благодарен за любую помощь.

5 ответ(ов)

0

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

import java.util.Scanner;

public class CurrencyFormatter {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Введите сумму платежа: ");
        double payment = scanner.nextDouble();
        scanner.close();

        // Форматирование для США
        java.text.NumberFormat formatUS = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.US);
        String us = formatUS.format(payment);

        // Форматирование для Индии
        java.text.NumberFormat formatIn = java.text.NumberFormat.getCurrencyInstance(new java.util.Locale("en", "IN"));
        String india = formatIn.format(payment);

        // Форматирование для Китая
        java.text.NumberFormat formatChina = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.CHINA);
        String china = formatChina.format(payment);

        // Форматирование для Франции
        java.text.NumberFormat formatFrance = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.FRANCE);
        String france = formatFrance.format(payment);

        // Вывод результатов
        System.out.println("США: " + us);
        System.out.println("Индия: " + india);
        System.out.println("Китай: " + china);
        System.out.println("Франция: " + france);
    }
}

Этот код создает Scanner для считывания суммы платежа с консоли. Далее он использует NumberFormat для форматирования числового значения в соответствии с валютными стандартами США, Индии, Китая и Франции. Каждый форматированный результат выводится на экран. Так вы сможете увидеть, как одна и та же сумма выглядит в разных валютах.

0

Вы можете использовать следующий код для форматирования денежного значения в разных валютах в зависимости от локали. Пример на языке Java:

import java.util.*;
import java.text.*;

public class Solution {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double payment = scanner.nextDouble();
        scanner.close();

        NumberFormat lp;  // Локальный формат денег

        lp = NumberFormat.getCurrencyInstance(Locale.US);
        System.out.println("США: " + lp.format(payment));

        lp = NumberFormat.getCurrencyInstance(new Locale("en", "in"));
        System.out.println("Индия: " + lp.format(payment));

        lp = NumberFormat.getCurrencyInstance(Locale.CHINA);
        System.out.println("Китай: " + lp.format(payment));

        lp = NumberFormat.getCurrencyInstance(Locale.FRANCE);
        System.out.println("Франция: " + lp.format(payment));
    }
}

Объяснение кода:

  1. Импорт библиотек: Мы импортируем необходимые классы из пакетов java.util и java.text.
  2. Создание класса Solution: Основной класс, содержащий метод main.
  3. Чтение значения: Мы используем Scanner для чтения значения payment (платежа) из ввода пользователя.
  4. Форматирование и вывод:
    • Для каждой локали (США, Индия, Китай, Франция) создается экземпляр NumberFormat, который формирует денежный формат для соответствующей валюты.
    • Затем, с помощью System.out.println(), мы выводим отформатированное значение на экран.

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

0

Лучший способ — просто импортировать java.util.Locale.

Затем используйте метод следующим образом:

NumberFormat.getCurrencyInstance(Locale.theCountryYouWant);

Например, NumberFormat.getCurrencyInstance(Locale.US);

0

Попробую ответить на ваш вопрос о коде Java для конвертации валюты.

Ваш код выглядит хорошо и выполняет конвертацию вводимой суммы в разные валюты, включая индийскую, американскую, китайскую и французскую. Давайте я объясню, как он работает шаг за шагом:

  1. Импорт библиотек:

    import java.util.*;
    import java.text.*;
    

    Вы импортируете необходимые пакеты для работы со сканером и форматированием чисел.

  2. Основной класс:

    public class CurrencyConvertor {
    

    Определяете класс CurrencyConvertor, в котором будет располагаться ваша логика.

  3. Метод main:

    public static void main(String[] args) {
    

    В этом методе вы запускаете программу.

  4. Чтение входных данных:

    Scanner scanner = new Scanner(System.in);
    double curr= scanner.nextDouble();
    

    Здесь создается объект Scanner для чтения ввода пользователя, и вы ожидаете, что он введет число, представляющее сумму в валюте.

  5. Закрытие сканера:

    scanner.close();
    

    Закрываете сканер после получения данных, что является хорошей практикой.

  6. Проверка диапазона:

    if(curr>=0 && curr<=1000000000){
    

    Программа проверяет, находится ли введенная сумма в допустимых пределах (от 0 до 1 миллиарда).

  7. Форматирование валюты:

    NumberFormat france = NumberFormat.getCurrencyInstance(Locale.FRANCE);
    NumberFormat us = NumberFormat.getCurrencyInstance(Locale.US);
    NumberFormat china = NumberFormat.getCurrencyInstance(Locale.CHINA);
    NumberFormat india = NumberFormat.getCurrencyInstance(Locale.ENGLISH);
    

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

  8. Вывод результатов:

    System.out.println("India: "+NumberFormat.getCurrencyInstance(new Locale("en","IN")).format(curr)); 
    System.out.println("US: " + us.format(curr));
    System.out.println("China: "+ china.format(curr));
    System.out.println("France: " + france.format(curr));
    

    Наконец, программа выводит отформатированные значения для каждой локали.

Если вводимое значение не попадает в указанный диапазон, программа просто ничего не выведет.

Если у вас есть другие вопросы или пожелания на доработку, пожалуйста, дайте знать!

0

Вы можете использовать класс Locale для получения валюты, привязанной к определенной стране. Вот пример кода, который демонстрирует, как это сделать:

Locale currentLocale = Locale.GERMANY;
Double currencyAmount = new Double(9876543.21);
Currency currentCurrency = Currency.getInstance(currentLocale);
NumberFormat currencyFormatter = 
    NumberFormat.getCurrencyInstance(currentLocale);

System.out.println(
    currentLocale.getDisplayName() + ", " +
    currentCurrency.getDisplayName() + ": " +
    currencyFormatter.format(currencyAmount));

Вывод: German (Germany), Euro: 9.876.543,21 €

В этом примере мы задаем локаль для Германии, получаем связанную с ней валюту (евро) и форматируем сумму с учетом немецкого формата отображения валюты.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь