我如何修复每次 运行 程序的 NumberFormatException 错误?

How do I fix the error of NumberFormatException everytime I run the program?

我必须为我的计算机科学创建一个爱情计算器对象 class。 但是,每次我编译和 运行 程序时,我都会以错误结束:

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,但我不明白它是如何工作的(因为我刚开始 class 并且是初学者)。

对于这种情况,我将如何使用 try and catch?

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;

但唯一能做的就是让您的程序不崩溃,您将始终从 calculate() 方法返回 0.0。相反,您需要修复异常的 source

正如你看到的异常堆栈跟踪,异常是由字符串70.78%引起的。这是因为它有一个符号,其中 Double.parseDouble() 期待双值表示格式的字符串,如 70.78。如果您正在寻找类似 70.78% 的输出并且该值正确,您可以 return nf.format(relationship) 并将 calculate 的 return 类型更改为 String.

更新

以下值可有效解析为双精度数:"1.2", "1", ".2", "0.2", "1.2D", "1.",表示数据类型可容纳的有效数字表示形式。