带有货币符号的Java String.format
以下forms的一些现有代码用于格式数值:
String.format( pattern, value )
请注意,我无法更改代码本身 – 我只能更改提供给代码的格式模式。
输出默认语言环境的货币符号的格式模式是什么? 基本上,我想实现以下输出:
String.format( "...", 123 ) => $ 123
有了你给出的限制,我认为不可能实现它。 要获取当前Locale的货币符号,您只需要至少代码。
如果您绝对无法向程序添加代码,则最好使用已建立的符号“ currency ”(¤)。 它是为了这个目的而建立的,象征着货币没有任何更具体的符号。
如果您无法更改给定代码,但是将代码作为整体添加到项目中,则可以使用它来查找最佳使用的符号。 获得后,您可以使用它为现有代码创建用于格式化的模式。
如果您可以找到原始程序将在下一个运行的Locale中,您可以编写一个使用该设置填充配置的助手程序。
无需重新发明轮子。 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 €
您可以尝试以下方法:
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 €
如果没有可用的默认区域设置,我们可以使用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
String formatstring=String.format("$%s", 123); System.out.println(formatstring);