C中不同类型的数学运算

时间:2016-02-07 03:12:46

标签: c printf scanf

我是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?

3 个答案:

答案 0 :(得分:1)

问题在于:

double owedTax = (taxRate / 100) * userAGI;

由于taxRate是一个整数,100是一个整数,它执行整数除法,结果为整数0。然后,它会将此结果转换为double并将其乘以userAGI。要修复它,你只需要强制它进行浮动除法,如下所示:

double owedTax = (taxRate / 100.0) * userAGI;

由于100.0double常量,因此在执行除法之前,它会将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:

上链接了这个优秀的讨论

What is the behavior of integer division in C?

答案 2 :(得分:0)

变化:

// calculate owed tax
double owedTax = (taxRate / 100.0) * userAGI;

您必须使用100.0而不是100来获得所需的结果。

如果划分两个整数,则执行整数除法,丢弃小数部分。