我必须为我的计算机科学课创建一个爱情计算器对象。 但是,每次编译和运行程序时,我都会遇到错误:
java.lang.NumberFormatException:
输入字符串:" 70.78%" (在sun.misc.FloatingDecimal中)
我的方法代码:
public double calculate()
{
double value1;
double value2;
double sqrt1;
double sqrt2;
double relationship;
sqrt1 = Math.sqrt(name1.length());
sqrt2 = Math.sqrt(name2.length());
value1 = (Math.pow(name1.length(), 3)/(Math.random()+0.1))* sqrt1;
value2 = (Math.pow(name2.length(), 3)/(Math.random()+0.1))* sqrt2;
if(value1 > value2)
{
relationship = value2 / value1;
}
else
{
relationship = value1 / value2;
}
NumberFormat nf = NumberFormat.getPercentInstance();
nf.setMinimumFractionDigits(2);
return Double.parseDouble(nf.format(relationship));
}
我试图将它转换为浮点数。我试图通过声明和初始化另一个双变量并将其返回来分离它,但它们并没有起作用。我查找了解决方案,大多数人说要尝试使用,但是我不明白这是怎么回事(因为我刚开始上课并且是初学者)。
我如何使用try和catch来解决这种情况?
答案 0 :(得分:2)
NumberFormat
旨在创建一个人类可读的字符串。 70.78%
不是号码。 70.78
是,但是百分号,它是一个字符串。您似乎正在尝试使用数字格式化功能来舍入数字。 This question对如何正确舍入数字并将其保留为数字提出了一些建议。
要回答您的其他问题,使用try/catch
的正确方法是:
double result;
try{
result = Double.parseDouble(nf.format(relationship));
}catch(NumberFormatException e){
e.printStackTrace();
result = 0.0;
}
return result;
但唯一要做的就是让您的程序不会崩溃,并且您始终会从0.0
方法返回calculate()
。相反,您需要修复异常的源。
答案 1 :(得分:0)
当您看到异常堆栈跟踪时,异常是由字符串70.78%
引起的。这是因为它有一个符号,Double.parseDouble()
期望一个字符串格式为双值表示,如70.78
。如果您要查找70.78%
之类的输出,并且值正确,则可以返回nf.format(relationship)
并将calculate
的返回类型更改为String
。
以下值有效解析为double:"1.2", "1", ".2", "0.2", "1.2D", "1."
,表示数据类型可以保存的有效数字表示。