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

时间:2015-09-30 02:56:26

标签: java numberformatexception

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

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来解决这种情况?

2 个答案:

答案 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.",表示数据类型可以保存的有效数字表示。