java - Java 中的 DecimalFormat applyPattern 不会覆盖语言环境设置

标签 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));

最佳答案

模式 ############.00 中的 . 是(当前设置的)decimalCharacter 的占位符。

如果你想要 . 作为十进制字符,那么你还必须设置 十进制字符,例如。通过设置 Locale.US

您可以保存您当前的语言环境,然后设置为Locale.US,然后设置回您保存的Locale, 但请确保您的应用不是多线程的。

你也可以使用

DecimalFormatSymbols.getInstance().setDecimalSeparator(".");

关于java - Java 中的 DecimalFormat applyPattern 不会覆盖语言环境设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14201648/

相关文章:

ruby-on-rails - 如何获取模型中的全局化字段列表?

java - 在Java中,在DecimalFormat替换方法中将点转换为逗号

java - 如果我不需要终止的任何值(value),我该如何终止流?

java - 带有字符串通配符的 setFilter()?

grails - 在Grails中本地化验证(错误)消息

c# - WPF 本地化扩展 : Translate window at run-time

java - 在java中使用AES有效加密文件

java - 如何使用 Hibernate 通过修剪空格从数据库中获取数据?

java - DecimalFormat 未根据 Half_Even 舍入给出结果

javascript - 在 jQuery Globalize 中设置小数格式