我想做什么:
我制作了BMI计算器(公式=(KG * KG)/ M) 输入需要例如186,但插入1.86(高度以米为单位)时出现错误
java.lang.NumberFormatException: For input string: "1.86"
这是我的代码:
if (txtHeight.getText().length() > 0 && txtWeight.getText().length() > 0){
height = Integer.parseInt(txtHeight.getText());
heightsqr = (int) Math.pow(height, 2);
mass = Integer.parseInt(txtWeight.getText());
bmi = (heightsqr/ mass);
lblBmi.setText("Current BMI : " + Integer.toString(bmi));
}
else{
JOptionPane.showMessageDialog(this, "Please enter your weight in KG and your Height in M");
}
这是一个非常基本的错误,我似乎无法修复
答案 0 :(得分:1)
正如stacktrace
所述,您无法将1.86
转换为int
。为什么?因为它是double
。
尝试:
mass = Double.parseDouble(txtWeight.getText());
在Java中,我们有类型。 int
只能存储整数。实数可以存储在float
和double
中,但请记住,您可能会失去精确度。
我不知道你的整个代码,所以我无法告诉你,mass
的类型是什么。如果您的代码中有以下内容:
int mass;
将其更改为:
double mass;
一些随意的想法:
正如您已经看到的那样,Exception
可能会被抛出。它发生取决于我相信的用户输入。在Java中,我们有一种安全机制。它是try-catch
块。例如,它可以用于以下方式:
try {
mass = Double.parseDouble("1,86");
} catch (NumberFormatException e) {
//somehow notify user that he has mistaken and work it out according to your business logic.
}
我强烈建议您阅读我在StackOverflow
问题What is a NumberFormatException and how can I fix it
上提供的 this教程。
答案 1 :(得分:0)
Integer
是非十进制值,因此1.86无效。
尝试将其转换为Double
:
Double.parseDouble(txtHeight.getText());
答案 2 :(得分:-1)
您尝试将double转换为int。那导致错误。如果你想修复它,你应该只接受整数或只接受双打。否则你需要2个if语句。转换为double看起来像这样:height = Double.parseDouble(txtHeight.getText());