Java:浮点格式取决于Locale

Mar*_*aux 27 java floating-point formatting locale

我住在比利时.通常,在数学中,我们用这样的逗号写小数:3,141592
这也是我格式化浮点数时的结果.

System.out.println(String.format("%f", 3.141592));
Run Code Online (Sandbox Code Playgroud)

因此,它.被替换为,如此:3,141592.所以总是当我需要一个点而不是我必须添加这样的东西:String.format("%f", 3.14).replace(',','.');

所以,问题是:有没有办法改变Locale,这使得Java中的每个格式化程序都使用一个点而不是逗号?

谢谢


System.out.println(Locale.getDefault());
Run Code Online (Sandbox Code Playgroud)

版画

nl_BE
Run Code Online (Sandbox Code Playgroud)

rod*_*ion 47

尝试使用String.format(Locale.US, "%f", floatValue)仅设置格式化期间使用的区域设置.


Cod*_*nci 9

一个简单的解决方案,但是可以在整个Locale中广泛使用,将系统区域设置为美国或英国.例.

Locale.setDefault(Locale.US);
Run Code Online (Sandbox Code Playgroud)

由于您已更改了问题,因此您只需使用print方法指定local.

System.out.println(String.format(Locale.US, "%f", 3.141592));
Run Code Online (Sandbox Code Playgroud)

  • 或者使用`String.format(Locale.US,"%f",floatValue)`来设置格式化期间使用的语言环境. (3认同)
  • 这样做的问题是你得到逗号作为千位分隔符,它对法国或比利时用户来说变得非常混乱.我们的TouhsandsSeparator是空格,逗号是我们的小数点分隔符. (2认同)

pet*_*ust 7

查看http://download.oracle.com/javase/6/docs/api/java/text/DecimalFormat.html可能很有用, 其中包含许多用于在必要时使用Locale精确输出字符串的选项

DecimalFormat是NumberFormat的具体子类,用于格式化十进制数.它具有多种功能,旨在解析和格式化任何语言环境中的数字,包括支持西方,阿拉伯语和印度语数字.它还支持不同类型的数字,包括整数(123),定点数(123.4),科学记数法(1.23E4),百分比(12%)和货币金额(123美元).所有这些都可以本地化.

通过定制例程路由输入和输出通常很有用.这是来自JAMA图书馆的一个(http://math.nist.gov/javanumerics/jama/)

   public void print (PrintWriter output, int w, int d) {
      DecimalFormat format = new DecimalFormat();
      format.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US));
      format.setMinimumIntegerDigits(1);
      format.setMaximumFractionDigits(d);
      format.setMinimumFractionDigits(d);
      format.setGroupingUsed(false);
      print(output,format,w+2);
   }
Run Code Online (Sandbox Code Playgroud)

通过使用此功能,您可以确保可能会解决未来的问题和增强功能