带有货币符号的Java String.format

Mar*_*zzi 12 java locale

以下形式的一些现有代码用于格式数值:

String.format( pattern, value )
Run Code Online (Sandbox Code Playgroud)

请注意,我无法更改代码本身 - 我只能更改提供给代码的格式模式.

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

String.format( "...", 123 )  => $ 123
Run Code Online (Sandbox Code Playgroud)

Boh*_*ian 14

无需重新发明轮子.DecimalFormat附带货币支持:

String output = DecimalFormat.getCurrencyInstance().format(123.45);
Run Code Online (Sandbox Code Playgroud)

这还有完整的语言环境支持,可选择传入Locale:

String output = DecimalFormat.getCurrencyInstance(Locale.GERMANY).format( 123.45);
Run Code Online (Sandbox Code Playgroud)

这是一个测试:

System.out.println(DecimalFormat.getCurrencyInstance().format( 123.45) );
System.out.println(DecimalFormat.getCurrencyInstance(Locale.GERMANY).format( 123.45)) ;
Run Code Online (Sandbox Code Playgroud)

输出:

$123.45
123,45 €
Run Code Online (Sandbox Code Playgroud)


Pau*_*gas 5

您可以尝试以下方法:

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
}
Run Code Online (Sandbox Code Playgroud)

这打印:

123 €
123.10 €
Run Code Online (Sandbox Code Playgroud)


Urs*_*pke 4

根据您给出的限制,我认为不可能实现它。\n要获取当前语言环境的货币符号,您需要最少的代码。

\n\n

如果您完全没有办法向程序添加代码,您最好使用已建立的“货币”符号 (\xc2\xa4)。它正是为了这个目的而建立的,以象征没有任何更具体符号的货币。

\n\n

如果您无法更改给定的代码,但将代码作为一个整体添加到项目中,则可以使用它来找出最适合使用的符号。拥有它后,您可以使用它为现有代码创建用于格式化的模式。

\n\n

如果您可以找出原始程序接下来将在哪个区域设置中运行,您可以编写一个助手程序,使用该设置来填充您的配置。

\n