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

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

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

30
задан JPittard 19 October 2011 в 21:25
поделиться

2 ответа

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;  //Local Payment

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

        lp = NumberFormat.getCurrencyInstance(new Locale("en", "in"));
        System.out.println("India: " + lp.format(payment));

        lp = NumberFormat.getCurrencyInstance(Locale.CHINA);
        System.out.println("China: " + lp.format(payment));

        lp = NumberFormat.getCurrencyInstance(Locale.FRANCE);
        System.out.println("France: " + lp.format(payment));
    }
}
7
ответ дан 27 November 2019 в 23:17
поделиться
Scanner scanner = new Scanner(System.in);
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: " + us);
System.out.println("India: " + india);
System.out.println("China: " + china);
System.out.println("France: " + france);
2
ответ дан 27 November 2019 в 23:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: