java如何解析一个整数,当我有一个double的格式时?
我从数据库中获取用户条目,它存储用户输入的值,可能是float或int,但我的代码旨在检查以下条件
String pattern = "###,###.##";
DecimalFormat decimalFormat = new DecimalFormat(pattern);
if (!userput.equals("")){
resultoutput.setText(""+Double.parseDouble(userput)*Double.parseDouble(decimalFormat.format(Double.parseDouble(x[1]))));}
else{
userinput.setText("1");
resultoutput.setText(""+Double.parseDouble(decimalFormat.format(Double.parseDouble(x[1]))));
}
因此,当它遇到int
时,它就会崩溃。例如,对于13152,它给出java.lang.NumberFormatException: Invalid double: "13,152"
此外,如果我得到这样的输出13170.00
,我得到的错误如下java.lang.NumberFormatException: Invalid double: "13,170.00"
有时从数据库获取的值包含float,有时包含integer,这里x[1]
是货币汇率,userinput
包含integer
或float
。。。。假设我试图得到usd to idr
{13170.00
,它不是double
,也不是int
,因为我得到了这个错误java.lang.NumberFormatException: Invalid double: "13,170.00"
# 1 楼答案
它是
double
,因为它包含.
,不包含f
或F
后缀从Java Tutorials
# 2 楼答案
你的问题不在于这个数字是整数还是双精度。你的问题在于你的转换率超过三位数
这是用于显示值(重新格式化)的代码:
那么,你是:
问题在于第2步和第3步。它们实际上是不必要的。但对于某些数字来说,它们会起作用
你的格式是
###,###.##
。让我们看看一些数字在用这种格式格式化时是什么样子的:因此,当转换率小于小数点左边的四位数时,
decimalFormat.format()
调用会将它们转换为一个仍然是合法Java双精度的字符串。因此,当您在第3步中对这个字符串调用Double.parseDouble
时,一切都很好但是当你有一个大的数字,比如^{,你要做的是:
13152.0
13,152.0
Double.parseDouble()
的输入中的,
李>所以说真的,你的转换应该是:
这将在
resultoutput
中为您提供一个正确的、未格式化的数字,而不会引发异常我很确定你想用
decimalFormat
来显示数字,而不是一次又一次地转换它。这意味着您应该只在转换的结果上使用它,而不是执行"" + ...
,后者只提供默认格式不过,请注意,在格式中,小数点后不会出现两位数字——它将
10.0
显示为10
。如果希望始终显示两位数,则必须使用###,##0.00
作为格式