C++ (30 <= 30) 不起作用

C++ (30 <= 30) not work

本文关键字:不起作用 lt C++      更新时间:2023-10-16

有问题:

string bmi(double w, double h)
{
    string answer;
    double bmi = w / (h*h);
    cout << setprecision(9) << bmi << endl;
    if (bmi <= 18.5) {
        answer = "Underweight";
    } else if (bmi <= 25.0){
        answer = "Normal";
    } else if (bmi <= 30.0){
        answer = "Overweight";
    } else {
        answer = "Obese";
    }
    return answer;
}
int main() {
    cout << bmi(81.585, 2.1) << endl;
    cout << bmi(90.25, 1.9) << endl;
    cout << bmi(86.7, 1.7) << endl;
    cout << bmi(200, 1.6) << endl;
    return 0;
}

3.电话必须给出"超重"的答案,却扔"肥胖",我做错了什么?

这就是有限精度表示的本质。我将向您展示一个十进制示例:

假设您将 1/3 表示为"0.333333"。如果计算 (1/3 + 1/3 + 1/3),则得到"0.999999"而不是"1.0"。因此,如果您检查它是否大于或等于 1,您将获得 false。

正如 1/

3 没有精确的十进制表示形式一样,1/10 也没有精确的二进制表示形式。因此,不要在需要确切答案的应用程序中使用有限精度数字。