如何在Java中将数字格式化为格式为“xxx.xxx.xxx,yy”?

是否有一个Java类允许您将类似“102203345.32”的数字格式化为此“102.203.345,32”并返回字符串类型?

我想获得一个字符串,其中数千个被’。’分隔。 小数用逗号’,’分隔。

有人可以帮帮我吗? 我发现了一个DecimalFormat类,我尝试自定义它:

public class CustomDecimalFormat { static public String customFormat(String pattern, double value ) { DecimalFormat myFormatter = new DecimalFormat(pattern); String output = myFormatter.format(value); return output; } } 

但是当我像这样调用customFormat方法时:CustomDecimalFormat.customFormat(“###。###,00”)我得到一个exception……

我该怎么办?

谢谢!

请务必阅读并理解Javadoc的特殊模式字符部分,尤其是本说明:

此处列出的字符用于非本地化模式。 本地化模式使用从此格式化程序的DecimalFormatSymbols对象中获取的相应字符,这些字符将失去其特殊状态。

如果你已经这样做了,你应该清楚你必须使用适当的构造函数并提供适当配置的分隔符/分组字符,而在模式本身中,点和逗号具有特殊含义。

上面的所有复杂性实际上都是为了您的方便:它允许您自定义数字格式并将其本地化。

这是一个适合我的代码示例:

 final DecimalFormatSymbols syms = new DecimalFormatSymbols(); syms.setDecimalSeparator(','); syms.setGroupingSeparator('.'); DecimalFormat myFormatter = new DecimalFormat("###,###.00", syms); System.out.println(myFormatter.format(1234.12)); 

您还可以使用应用本地化模式的变体,以获得更直观的代码:

 final DecimalFormatSymbols syms = new DecimalFormatSymbols(); syms.setDecimalSeparator(','); syms.setGroupingSeparator('.'); DecimalFormat myFormatter = new DecimalFormat("", syms); myFormatter.applyLocalizedPattern("###.###,00"); System.out.println(myFormatter.format(1234.12)); 

首先,你错放了逗号和小数点。 您的格式应为:###,###。00而不是###。###,00 …

还要检查您的Locale,它会对格式产生影响。 请参阅以下链接。

http://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html

您可以尝试GERMAN数字格式

 NumberFormat.getNumberInstance(Locale.GERMAN).format(102203345.32)