Java DecimalFormat在其他机器上不工作
我制作了一个java应用程序,其中我使用DecimalFormat对数字输出进行格式化Java DecimalFormat在其他机器上不工作,java,Java,我制作了一个java应用程序,其中我使用DecimalFormat对数字输出进行格式化 DecimalFormat df = new DecimalFormat("#.##"); return Double.parseDouble(df.format(costs)); 它在我的计算机上运行良好,但当该代码在另一台计算机上执行时, 我得到这个错误: Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatExcepti
DecimalFormat df = new DecimalFormat("#.##");
return Double.parseDouble(df.format(costs));
它在我的计算机上运行良好,但当该代码在另一台计算机上执行时,
我得到这个错误:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "25,1"
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
这两台机器都安装了最新的java版本,都是windows 7。一台机器是64位的,而另一台是32位的。错误仅发生在另一台机器上的原因是什么?总而言之,语言环境。一台机器是欧洲格式的,
,
,另一台是美国/英国的,。
编辑:
使用DecimalFormat对象向两个方向移动:df.parse(…)
解析由df.format
df.format(25.1)
根据默认或指定的区域设置返回格式化的数字String
i、 e.对于Locale.US
它将返回String
25.1
,而对于Locale.ITALY
它将返回25,1
,因为这两个地区的十进制分隔符不同
另一个问题是您正在将格式化的字符串
解析为double
。如果您有double
值(或其他有效数字),则不需要使用DecimalFormat
格式化数字
如果您有有效的数字字符串
(25.1
),您可以用分码器
按以下方式解析它
NumberFormat nf = NumberFormat.getNumberInstance(Locale.ITALY);
DecimalFormat df = (DecimalFormat) nf;
df.applyPattern("#.##");
try {
System.out.println(df.parse("25,1"));
} catch (ParseException e) {
e.printStackTrace();
}
输出
25.1
我添加到程序中,现在它首先为我们设置了区域设置,现在工作正常。机器上的区域设置确实不同。