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

时间:2017-10-07 19:27:11

标签: c++ if-statement double

遇到问题:

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呼叫必须给予&#34;超重&#34;回答,但反而扔掉了#Obese&#34;,我做错了什么?

1 个答案:

答案 0 :(得分:1)

这只是有限精度表示的本质。我将以十进制显示一个示例:

假设您代表1/3为&#34; 0.333333&#34;。如果你计算(1/3 + 1/3 + 1/3),你会得到&#34; 0.999999&#34;而不是&#34; 1.0&#34;。因此,如果你检查它是否大于或等于1,你将得到错误。

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