我是C的新手,我正在尝试编写一个简单的程序,根据总收入和税率计算欠税金额。我不知道为什么owedTax使用以下输入打印为0。
#include <stdio.h>
int main()
{
// get user's AGI
double userAGI;
printf("enter agi:\n");
scanf("%lf",&userAGI)
// get tax rate
int taxRate;
printf("enter desired tax rate:\n");
scanf("%d",&taxRate);
// calculate owed tax
double owedTax = (taxRate / 100) * userAGI;
printf("%lf\n",owedTax);
return 0;
}
输出继电器:
enter agi:
100
enter desired tax rate:
10
0.0000000
为什么owedTax打印为0?
答案 0 :(得分:1)
问题在于:
double owedTax = (taxRate / 100) * userAGI;
由于taxRate
是一个整数,100
是一个整数,它执行整数除法,结果为整数0
。然后,它会将此结果转换为double
并将其乘以userAGI
。要修复它,你只需要强制它进行浮动除法,如下所示:
double owedTax = (taxRate / 100.0) * userAGI;
由于100.0
是double
常量,因此在执行除法之前,它会将taxRate
转换为double
。
答案 1 :(得分:0)
修复
double owedTax = (taxRate / 100) * userAGI;
到
double owedTax = (taxRate / 100.0) * userAGI;
^^^^^
或
double owedTax = ((double)taxRate / 100) * userAGI;
^^^^^^^^
问题是在C和C ++中,当你划分两个整数时,会执行一个整数除法,它返回结果的整数部分,并丢弃小数部分。
查找
代数中的 10 / 100 = 0.1
。丢弃小数部分 - &gt; 0
仍然存在。
如果要分割两个整数并获得精确的浮点结果,请将其中一个整数显式地转换为浮点类型。确实是一个常见错误! (多次自己完成。)
作为参考,我在SO:
上链接了这个优秀的讨论答案 2 :(得分:0)
变化:
// calculate owed tax
double owedTax = (taxRate / 100.0) * userAGI;
您必须使用100.0而不是100来获得所需的结果。
如果划分两个整数,则执行整数除法,丢弃小数部分。