Java中的DecimalFormat applyPattern不会覆盖区域设置

时间:2013-01-07 18:16:31

标签: java internationalization decimalformat

我正在尝试调试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));

3 个答案:

答案 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

Locale-Sensitive Formatting

中查看详情

答案 2 :(得分:0)

在模式############.00中,'。'表示区域设置的小数分隔符。

在你的情况下,我理解它是法语小数分隔符,它是','。

相关问题