0

我正在尝试使用此代码将您在文本字段中输入的公里数转换为英里数......但它不起作用。谁能帮我这个 ?

private void btn_convertActionPerformed(java.awt.event.ActionEvent evt) {

    String str2 = "0.621";

    int num1 = Integer.parseInt(txt_input.getText());
    int num2 = Integer.parseInt(str2);
    lbl_converted.setText("" + (num1 * num2));
    ...
}
4

6 回答 6

3

您正在尝试使用浮点数。在这种情况下Integer不是您需要的类型。改用Double(和类似的东西Double.parseDouble(txt_input.getText());)。此外,您不需要 str2 是字符串 - 改用双常量。

于 2013-09-10T11:21:01.903 回答
1

而不是Integer用于Double解析

于 2013-09-10T11:23:23.430 回答
0

"0.621"不是整数 - 尝试使用双精度或浮点数。

此外,首先不需要将它放在 String 中,只需使用类似的双重文字

final double num2 = 0.621;

请注意,Integer.parseInt 可能会引发 NumberFormatException,应予以处理。

于 2013-09-10T11:21:33.010 回答
0

你可以简单地使用

final double converter = 0.621;
double num = Double.parseDouble("45");
double answer = num * converter;

这样,您甚至不必解析已知值。您甚至可以将其设为常数,因为转换器不会改变

于 2013-09-10T11:22:18.973 回答
0

只需更改您的代码如下:

private void btn_convertActionPerformed(java.awt.event.ActionEvent evt) {

   double num1 = Double.parseDouble(txt_input.getText());

    lbl_converted.setText("" + (num1 * 0.621));
    ...
}
于 2013-09-10T11:23:37.540 回答
0

您使用 String 作为数字,这不是处理问题的正确方法,因为当解析为 int 时,您会得到一个错误的数字,它可能只是双精度的整数部分。在您的情况下,您将看到转换常数为零。你的代码应该是:

private void btn_convertActionPerformed(java.awt.event.ActionEvent evt) {

    double conversionConstant = 0.621;

    int input = Integer.parseInt(txt_input.getText());
    double kmToMiles = conversionConstant * input;
    lbl_converted.setText("" + kmToMiles);
    ...
}

这是合理的,但如果用户输入一个非整数值,如 is1.5或 NaN(非数字) ,它将失败

这应该是您问题的完整解决方案:

private void btn_convertActionPerformed(java.awt.event.ActionEvent evt) {

    final double CONVERSION_CONSTANT = 0.621;

    String inputText = txt_input.getText();

    double input;
    try{
        input = Double.parseDouble(txt_input.getText());
        double kmToMiles = conversionConstant * input;
        lbl_converted.setText("" + kmToMiles);
    }catch(NumberFormatException e){
        System.out.println("You have typed a wrong input. Only numbers are allowed");
    }

}
于 2013-09-10T11:30:18.833 回答