我正在尝试调试Java 1.6中涉及DecimalFormat#applyPattern(String)
的问题。默认语言环境是法语,因此默认情况下小数点分隔符为“,”。但是,模式指定应用'。'到似乎没有的十进制格式实例。我试图调试applyPattern()
,但看不到变量值。我不是很熟悉模式和注册表,所以我不确定问题是关于模式还是别的。它是不正确的模式还是代码存在其他问题?
以下是代码段:
public class DecimalFormatTester
{
static private final DecimalFormat doubleFormat = (DecimalFormat) NumberFormat.getInstance();
static
{
doubleFormat.applyPattern("############.00");
}
public static String toString(double value)
{
synchronized (doubleFormat)
{
return doubleFormat.format(value);
}
}
}
以下是Junit
代码失败的示例行:
assertEquals("String values aren't equal", "2179005635.00", DecimalFormatTester.toString(2.179005635E9));
答案 0 :(得分:3)
模式 .
中的 ############.00
是(当前设置的)decimalCharacter的占位符。
如果您想要 .
作为十进制字符,那么您还必须设置
decimalCharacter,例如。设置Locale.US
您可以保存当前的区域设置,然后设置为Locale.US
,然后设置回已保存的Locale
,
但请确保您的应用不是多线程的。
您也可以使用
DecimalFormatSymbols.getInstance().setDecimalSeparator(".");
答案 1 :(得分:1)
更改相应输出的区域设置。另一方面,您可以使用自定义DecimalFormatSymbols
。
###,###.### 123,456.789 en_US
###,###.### 123.456,789 de_DE
###,###.### 123 456,789 fr_FR
中查看详情
答案 2 :(得分:0)
在模式############.00
中,'。'表示区域设置的小数分隔符。
在你的情况下,我理解它是法语小数分隔符,它是','。