用Java格式化外部语言环境中的货币

时间:2011-10-19 21:25:30

标签: java format currency

我正在尽最大努力找到一种方法,使用Java在各种语言环境中格式化外币,这些语言环境不是该货币的默认值。我找到了java.util.Currency,它可以表示用于各种语言环境的正确符号。也就是说,对于美元而言,它为我提供了美国的符号$,以及其他国家的美元或美元。此外,我找到了java.text.NumberFormat,它将格式化特定区域设置的货币。我的问题 - util.Currency将提供适当的符号和代码,用于在非默认语言环境中表示货币,但不会以任何特定于语言环境的方式格式化货币。 NumberFormat假定我使用区域设置传递的数字是该区域设置的货币不是外币。

例如,如果我使用getCurrencyInstance(Locale.GERMANY)然后格式化(1000),则假定我格式化为1000欧元。实际上,对于美元,日元或任何其他货币,我可能需要正确的德语本地化表示(正确的小数和千位分隔符,无论是在金额之前还是之后放置符号)。到目前为止我能够得到的最好的是使用NumberFormat格式化数字,然后在输出中搜索非数字字符,并用从util.Currency派生的符号替换它们。但是,这非常脆弱,可能对我的目的来说不够可靠。想法?任何帮助深表感谢。

7 个答案:

答案 0 :(得分:44)

尝试在getCurrencyInstance(Locale.GERMANY)返回的实例上使用setCurrency

<强>断

java.text.NumberFormat format = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.GERMANY);
System.out.println(format.format(23));

输出:23,00€

<强>固定

java.util.Currency usd = java.util.Currency.getInstance("USD");
java.text.NumberFormat format = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.GERMANY);
format.setCurrency(usd);
System.out.println(format.format(23));

产出:23,00美元

答案 1 :(得分:23)

我想补充来自les2 https://stackoverflow.com/a/7828512/1536382的答案,我认为小数位数不是从货币中获取的,必须手动设置,否则如果客户端(NumberFormat)具有JAPAN区域设置且货币为EURO或en_US,然后金额显示'a la'Yen',没有小数位数,但这不是预期的,因为欧元小数相关,也适用于日语; - )。

因此可以改进添加format.setMaximumFractionDigits(usd.getDefaultFractionDigits());的示例,在该示例的特定情况下不相关但使用带小数的数字和Locale.JAPAN作为NumberFormat的区域设置变得相关。

    java.util.Currency usd = java.util.Currency.getInstance("USD");
    java.text.NumberFormat format = java.text.NumberFormat.getCurrencyInstance(
          java.util.Locale.JAPAN);
    format.setCurrency(usd);
    System.out.println(format.format(23.23));
    format.setMaximumFractionDigits(usd.getDefaultFractionDigits());
    System.out.println(format.format(23.23));

将输出:

USD23
USD23.23

NumberFormat code中,类似于格式的初始/默认货币,调用方法DecimalFormat#adjustForCurrencyDefaultFractionDigits。使用NumberFormat.setCurrency

更改货币后,不会执行此操作

答案 2 :(得分:6)

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));
    }
}

答案 3 :(得分:1)

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);

答案 4 :(得分:1)

更好的方法只是导入java.util.Locale

然后使用如下方法:

NumberFormat.getCurrencyInstance(Locale.theCountryYouWant);

例如NumberFormat.getCurrencyInstance(Locale.US);

答案 5 :(得分:0)

下面的代码,参考编号Java Locale

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

// Write your code here.
String china = NumberFormat.getCurrencyInstance(new Locale("zh", "CN")).format(payment);
String india = NumberFormat.getCurrencyInstance(new Locale("en", "IN")).format(payment);
String us = NumberFormat.getCurrencyInstance(Locale.US).format(payment);
String france = NumberFormat.getCurrencyInstance(Locale.FRANCE).format(payment);

System.out.println("US: " + us);
System.out.println("India: " + india);
System.out.println("China: " + china);
System.out.println("France: " + france);

答案 6 :(得分:0)


    import java.util.*;
    import java.text.*;
    public class CurrencyConvertor {   
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            double curr= scanner.nextDouble();
            scanner.close();
            if(curr>=0 && curr<=1000000000){
     NumberFormat france = NumberFormat.getCurrencyInstance(Locale.FRANCE);
    NumberFormat us = NumberFormat.getCurrencyInstance(Locale.US);
    NumberFormat china = NumberFormat.getCurrencyInstance(Locale.CHINA);
            NumberFormat india = NumberFormat.getCurrencyInstance(Locale.ENGLISH);
             
          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));
            }
        }
    }