16

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

String.format( pattern, value )

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

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

String.format( "...", 123 )  => $ 123
4

5 回答 5

18

无需重新发明轮子。DecimalFormat带有货币支持:

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

这还带有完整的语言环境支持,可以选择传入 a 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 €
于 2012-05-31T03:14:15.563 回答
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
}

这打印:

123 €
123.10 €
于 2012-05-31T03:02:38.850 回答
4

以您给出的限制,我认为不可能实现它。要获取当前区域设置的货币符号,您需要最少的代码。

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

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

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

于 2012-05-31T05:17:44.327 回答
3

如果没有可用的默认语言环境,我们可以使用 unicode 和十进制格式设置货币符号。如以下代码所示:

例如设置印度货币符号和格式化值。这无需用户更改设置即可工作。

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
于 2017-07-27T06:27:01.723 回答
-3
    String formatstring=String.format("$%s", 123);
    System.out.println(formatstring);
于 2012-05-31T03:12:04.800 回答