首页 > 解决方案 > 尽管使用 float 数据类型,乘法始终会导致 0

问题描述

#include <stdio.h>

int main()
{
    float income;
    printf("enter your annual income here:");
    scanf("%f", &income);
    if (income < 250000)
    {
        printf("no income tax"); /* code */
    }
    else if (income >= 250000 && income < 500000)
    {
        printf("your income tax will be:%f", 5 / 100 * income);
    }
    else if (income >= 500000 && income < 1000000)
    {
        printf("your income tax will be:%f", 20 / 100 * income);
    }
    else if (income >= 1000000)
    {
        printf("your income tax will be:%f", 30 / 100 * income);
    }

    return 0;
}

当我运行代码,输入超过 250000 的值时,我仍然得到 0 作为我的税收输出,即使我使用了float数据类型。

标签: carithmetic-expressions

解决方案


在表达式5 / 100 * income中,乘法运算符*和除法运算符/具有相同的优先级,并且从左到右分组。所以它解析为(5 / 100) * income

子表达式5 / 100具有除法运算符的整数参数,因此结果被截断为整数。这导致 0。

如果您将任一操作数(或两者)更改为浮点常量,即5.0 / 100,5 / 100.05.0 / 100.0,则会发生浮点除法,您将获得预期的结果。

20 / 10030 / 100有同样的问题,所以将它们分别更改为20.0 / 10030.0 / 100

或者完全摆脱除法并使用常量0.05,0.20.3


推荐阅读