DecimalFormat.applyPattern("#.##0,00") 抛出异常

DecimalFormat.applyPattern("#.##0,00") throwing an exception

对于代码:

DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance(locale);
df.applyPattern("#.##0,00");

它会抛出一个 IllegalArgumentException 异常模式消息“#.##0,00”

这有什么问题吗?

编辑: 我想使用 .作为千位分隔符和 , 作为小数点。我知道这是倒退的,但有一种情况是他们想要的格式。

您需要使用模式“#,##0.##”来指示小数分隔符和千位分隔符的位置。使用此 DecimalFormat 时使用的 Locale 将确定小数点分隔符是 . 还是 , -- 模式不应更改。

如果您没有得到正确的分隔符,您将需要使用不同的 Locale

您不必使用不同的 Locale

您可以使用 DecimalFormatSymbols class 来更改格式化方法生成的格式化数字中出现的符号。这些符号包括小数分隔符、分组分隔符、减号和百分号等。

下一个示例通过对数字应用奇怪的格式来演示 DecimalFormatSymbols class。异常格式是调用 setDecimalSeparatorsetGroupingSeparatorsetGroupingSize 方法的结果。

DecimalFormatSymbols unusualSymbols = new DecimalFormatSymbols(currentLocale);
unusualSymbols.setDecimalSeparator('|');
unusualSymbols.setGroupingSeparator('^');

String strange = "#,##0.###";
DecimalFormat weirdFormatter = new DecimalFormat(strange, unusualSymbols);
weirdFormatter.setGroupingSize(4);

String bizarre = weirdFormatter.format(12345.678);
System.out.println(bizarre);

当 运行 时,此示例以奇怪的格式打印数字:

1^2345|678

取自:https://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html