2012-05-31 79 views
11

有一些现有它用于格式数值后续形式的代码的Java的String.format与货币符号

String.format(pattern, value) 

注意,我不能改变代码本身 - 我只能更改提供给代码的格式模式。

什么是输出默认语言环境的货币符号的格式模式?从本质上讲,我想实现以下的输出:

String.format("...", 123) => $ 123 
+0

也许值得看一看[NumberFormat的(http://docs.oracle.com/javase/6/docs/api/java/text/NumberFormat.html#format (长))。 –

+0

编辑提到我不能更改代码 –

+0

@MarcPolizzi:你不能改变代码,但你*可以*改变格式字符串(大概在别处指定) - 是吗? –

回答

4

由于您提出的限制,我认为这是不可能实现的。 要获得当前的区域设置的货币符号,您需要最少的代码。

如果您完全没有办法向程序添加代码,则最好使用“currency”(¤)的已建立符号。它是为了这个确切的目的而建立的,以表示没有任何更具体的符号的货币。

如果您不能更改给定的代码,但将代码作为整体添加到项目中,则可以使用该代码找出最适合使用的符号。一旦拥有了它,就可以使用它为现有代码创建格式化模式。

如果您可以找出原始程序将在下一个运行的语言环境中,则可以编写一个使用该设置填充配置的助手程序。

4

你可以尝试以下方法:

public static void main(String[] args) { 
    System.out.println(String.format(" %d \u20AC", 123)); // %d for integer 
    System.out.println(String.format(" %.2f \u20AC", 123.10)); // %f for floats 
} 

此打印:

123 € 
123.10 € 
-2
String formatstring=String.format("$%s", 123); 
    System.out.println(formatstring); 
+0

如果我的JVM的本地语言为法语,似乎不打印欧元符号;仍然显示$ –

+0

ohhh对不起。我以为你想打印$。 –

11

无需推倒重来。 DecimalFormat配备了货币支持:

String output = DecimalFormat.getCurrencyInstance().format(123.45); 

这也可任选地使在Locale配备了完整的语言环境支持:

String output = DecimalFormat.getCurrencyInstance(Locale.GERMANY).format(123.45); 

这是一个测试:

System.out.println(DecimalFormat.getCurrencyInstance().format(123.45)); 
System.out.println(DecimalFormat.getCurrencyInstance(Locale.GERMANY).format(123.45)) ; 

输出:

$123.45 
123,45 € 
1

如果没有默认的Locale可用,我们可以使用unicode和decimal格式设置货币符号。如下面的代码:

例如,设置印度货币符号并设置其值。这将在用户无需更改设置的情况下运行。

Locale locale = new Locale("en","IN"); 
DecimalFormat decimalFormat = (DecimalFormat) DecimalFormat.getCurrencyInstance(locale); 
DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(locale); 
dfs.setCurrencySymbol("\u20B9"); 
decimalFormat.setDecimalFormatSymbols(dfs); 
System.out.println(decimalFormat.format(12324.13)); 

输出:

₹12,324.13