Java,双重比较,if((BMI)> = 18.5 ||(BMI)< = 24.9),条件为真,而BMI = 25.77777777777778

时间:2015-07-27 21:10:27

标签: java if-statement double

这只是一个简单的Java代码,但得到了错误的结果:

import java.util.Scanner;

public class BMI_Calculator {

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.print("Enter your weight(kg):");
        double w = s.nextDouble();
        System.out.printf("\n%s", "Enter you height(cm):");
        double h = s.nextDouble();
        h = h / 100;

        double BMI = w / (h * h);

        String b;

        if (BMI < 18.5) {
            System.out.println("less than 18.5");
            b = "Underweight";
        } else if ((BMI) >= 18.5 || (BMI) <= 24.9) {
            System.out.println("between 18.5 and 24.9");
            b = "Normal";
        } else if (BMI >= 25 || BMI <= 29.9) {
            System.out.println("between 25 and 29.9");
            b = "Overweight";
        } else {
            System.out.println("greater than 30");
            b = "Obese";
        }

        System.out.println("Your BMI is:" + BMI + "(" + b + ")");

    }

}

这是输出

  

输入您的体重(kg):58

     

输入身高(cm):150

     

介于18.5和24.9之间

     

您的BMI是:25.77777777777778(正常)

我认为它可能与double变量的精度有关,我尝试使用相同的代码将变量声明为float而不是double并得到相同的结果,我真的不明白这样的事情怎么会发生(25.7&lt; 24.9)?怎么样?!

1 个答案:

答案 0 :(得分:5)

else if ((BMI) >= 18.5 || (BMI) <= 24.9)

或(||)必须是&&)。您想检查BMI是否在范围内。

(也为下一个else if执行此操作。)