尽管使用 float 数据类型,乘法总是得到 0
Multiplication always results in 0 despite using the float data type
#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 的值时,即使我使用了 float
数据类型,我的税收输出仍然是 0。
表达式5 / 100 * income
中,乘法运算符*
和除法运算符/
优先级相等,从左到右分组。所以它解析为 (5 / 100) * income
子表达式 5 / 100
具有除法运算符的整数参数,因此结果被截断为整数。这导致 0.
如果您将其中一个操作数(或两者)更改为浮点常量,即 5.0 / 100
、5 / 100.0
或 5.0 / 100.0
,则会发生浮点除法,您将得到预期的结果。
20 / 100
和30 / 100
也有同样的问题,所以分别改成20.0 / 100
和30.0 / 100
。
或者完全去掉除法并使用常量 0.05
、0.2
和 0.3
.
#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 的值时,即使我使用了 float
数据类型,我的税收输出仍然是 0。
表达式5 / 100 * income
中,乘法运算符*
和除法运算符/
优先级相等,从左到右分组。所以它解析为 (5 / 100) * income
子表达式 5 / 100
具有除法运算符的整数参数,因此结果被截断为整数。这导致 0.
如果您将其中一个操作数(或两者)更改为浮点常量,即 5.0 / 100
、5 / 100.0
或 5.0 / 100.0
,则会发生浮点除法,您将得到预期的结果。
20 / 100
和30 / 100
也有同样的问题,所以分别改成20.0 / 100
和30.0 / 100
。
或者完全去掉除法并使用常量 0.05
、0.2
和 0.3
.