Java - 转换整数

Java - Convert int number

我想做什么:

我做了一个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");
        }

这是一个非常基本的错误,我似乎无法修复

您尝试将 double 转换为 int。那是导致错误的原因。如果你想修复它,你应该只接受整数或只接受双精度数。否则你将需要 2 个 if 语句。转换为 double 看起来像这样:height = Double.parseDouble(txtHeight.getText());

Integer 是非十进制值,因此 1.86 无效。

尝试将其转换为 DoubleDouble.parseDouble(txtHeight.getText());

正如 stacktrace 所说,您无法将 1.86 转换为 int。为什么?因为它是 double.

尝试:

mass = Double.parseDouble(txtWeight.getText());

在Java中,我们有类型。 int只能存储整数。实数可以存储在 floatdouble 中,但请记住,你可能会失去精度

我不知道你的整个代码,所以我不能告诉你,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.
}

我强烈建议阅读我在 Whosebug 问题 What is a NumberFormatException and how can I fix it 上提供的 this 教程