DecimalFormat 解析数字错误。为啥?
Posted
技术标签:
【中文标题】DecimalFormat 解析数字错误。为啥?【英文标题】:DecimalFormat is parsing number wrong. Why?DecimalFormat 解析数字错误。为什么? 【发布时间】:2020-05-09 11:14:37 【问题描述】:我目前创建了一个基本的 Java 应用程序,它允许将提供的数字解析为格式化的字符串。 我现在面临的问题是,DecimalFormat 以错误的格式格式化提供的值。
例子:
private final DecimalFormat format = new DecimalFormat();
public static void main(String[] args)
int number;
try
number = Integer.parseInt(args[0]);
catch(NumberFormatException ex)
System.out.println("The provided value was invalid!");
System.exit(0);
return;
format.applyPattern("#,###,###.##");
return format.format(number);
System.exit(0);
我在这里面临的问题是,例如,如果我在 jar 命令中提供数字 123456789
作为第一个参数,它会返回 123'456'789
而不是 123,456,789
的预期结果。
什么可能导致这个问题?
【问题讨论】:
你检查过你的语言环境吗?可能是默认语言环境已将分组分隔符设置为'
。您可以通过format.getDecimalFormatSymbols().getGroupingSeparator()
来检查分组分隔符。
【参考方案1】:
使用java.text.DecimalFormat
导入,以及此代码:
private static final DecimalFormat format = new DecimalFormat();
public static void main(String[] args)
int number = 1456781;
format.applyPattern("#,###,###.##");
System.out.println("The formatted version is -> " + format.format(number));
我得到的输出是
The formatted version is -> 1,456,781
Process finished with exit code 0
所以它的格式似乎正确?
【讨论】:
【参考方案2】:我在这里看到的一个问题是,您返回的是Integer
,而不是返回中的 void。此外,您正在从静态函数访问非静态函数format
。您可以将其移动到您的函数中,或用作静态变量。
private static DecimalFormat format = new DecimalFormat();
public static void main(String[] args)
int number;
try
number = Integer.parseInt(args[0]);
catch(NumberFormatException ex)
System.out.println("The provided value was invalid!");
System.exit(0);
return;
format.applyPattern("#,###,###.##");
System.out.println(format.format(number));
System.exit(0);
如果上述方法不起作用,那么它很可能来自您的语言环境。您可以使用此answer 强制区域设置
【讨论】:
以上是关于DecimalFormat 解析数字错误。为啥?的主要内容,如果未能解决你的问题,请参考以下文章