我如何修复每次 运行 程序的 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."
,表示数据类型可容纳的有效数字表示形式。
我必须为我的计算机科学创建一个爱情计算器对象 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."
,表示数据类型可容纳的有效数字表示形式。