1

我想将十进制值格式化为货币值:1234.56d 应该变成“1.234,56”(这种格式在一些欧洲国家使用)。我正在使用以下模式来格式化十进制值:

final DecimalFormat df = new DecimalFormat("###.###.###,00");
final String formatted = df.format(1234.56d);
System.out.println(formatted);

事实上,我正在使用SuperCSV的类FmtNumber,但这没关系,因为模式语法是相同的: new FmtNumber("###.###.###,00");

我得到的是一个 IllegalArgumentException 消息“模式中的多个小数分隔符”。

我知道只能有一个小数分隔符。但在我的情况下,它应该是符号“,”。而“,”在我的模式中只出现一次。

我在 Web 和 StackOverflow 上搜索了这条异常消息,但没有找到有用的答案。

我的错误是什么?

4

2 回答 2

6

javadoc中的格式字符串.始终是小数分隔符,并且始终分组分隔符。,

它在格式化中的实际表示String由格式化程序实例的语言环境给出。

例如

final DecimalFormat decimalFormat = new DecimalFormat("###,###,##0.00", DecimalFormatSymbols.getInstance(Locale.ENGLISH));

如果您查看javadoc清楚地FmtNumber说明“使用 DecimalFormat 类和默认语言环境” - 因此您需要具有正确的默认值Locale才能使其正常工作。

于 2013-04-11T15:40:54.533 回答
0

您应该使用文化而不是自定义字符串来格式化。只需使用:

decimalNumber.ToString("C2", CultureInfo.CreateSpecificCulture("fr-FR"));
于 2013-04-11T15:42:30.267 回答