Java 如何在每次运行程序时修复NumberFormatException错误?

Java 如何在每次运行程序时修复NumberFormatException错误?,java,numberformatexception,Java,Numberformatexception,我必须为我的计算机科学课创建一个love calculator对象。 但是,每次编译和运行程序时,我都会出现以下错误: java.lang.NumberFormatException: 对于输入字符串:“70.78%”(在sun.misc.FloatingDecimal中) 我的方法代码: public double calculate() { double value1; double value2; double sqrt1; double sqrt2;

我必须为我的计算机科学课创建一个love calculator对象。 但是,每次编译和运行程序时,我都会出现以下错误:

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-and-catch?

NumberFormat
用于创建人类可读的字符串<代码>70.78%不是一个数字
70.78是,但带有百分号,它是一个字符串。似乎您要做的是使用数字格式化功能对数字进行四舍五入。对于如何正确地对数字进行四舍五入并将其保持为数字,有一些建议

要回答您的另一个问题,正确使用
try/catch
的方法如下:

 double result;
 try{
   result = Double.parseDouble(nf.format(relationship));
 }catch(NumberFormatException e){
   e.printStackTrace();
   result = 0.0;
 }
 return result;

但是,唯一能做的就是使程序不会崩溃,并且始终会从
calculate()
方法返回
0.0
。相反,您需要修复异常的来源。

当您看到异常堆栈跟踪时,异常是由字符串
70.78%
引起的。这是因为它有一个符号,
Double.parseDouble()
需要一个双值表示格式的字符串,如
70.78
。如果您正在查找像
70.78%
这样的输出,并且该值正确,则可以返回
nf.format(relationship)
,并将
calculate
的返回类型更改为
String

更新
以下值可以有效地解析为双精度值:
“1.2”、“1”、“0.2”、“1.2D”、“1”。
,表示数据类型可保留的有效数字表示形式。

是的,我正在尝试将数字舍入并保留为数字,但也包括%符号。可以这样做吗?@immmjimmy No.A
double
无法存储百分号。您需要返回
字符串。一个
double
是唯一的数字,因此可以返回结果+“%”?编辑:我刚看到你的答案,把它改成字符串就行了。什么时候double/int/float不能在字符串中工作?