每当使用除法时,C程序中的计算总是导致0

时间:2011-10-11 00:11:58

标签: c math

我使用两个不同的变量将计算与intdouble中的变量分开。当我使用类似的东西时,这些工作正常:

int cost
cost = 40;
cost = (cost / 400) * 20 * 2;

为此,该方法工作正常,我得到了正确的结果4,但是当我使用变量cost并将其放在标题中时,如:

#define cost 40
int total_cost;
total_cost = (cost / 400) * 20 * 2;

这对我来说总是导致0,我不知道为什么。即使我将printf%d%f一起使用,这仍然会给我0的结果。

2 个答案:

答案 0 :(得分:6)

你正在进行整数除法 - 它向下舍入。

因此:

cost / 400

返回零,因为cost = 4040 / 400向下舍入为零。

你应该做的是使用像double这样的浮点类型。

编辑:

double cost
cost = 40;
cost = (cost / 400) * 20 * 2;

#define cost 40
double total_cost;
total_cost = ((double)cost / 400) * 20 * 2;

答案 1 :(得分:0)

运营顺序和整数部门。

整数除法总是截断。数学上,40/400 = .1 - 但这不是整数。其余部分被丢弃,留下:40 / 400 = 0

操作顺序意味着在您的示例中首先完成除法。由于乘法和除法的顺序无关紧要(从数学上讲),请尝试更改顺序:

total_cost = cost * 20 * 2 / 400;

乘法首先发生,分裂最后发生,给你:

40 * 20 * 2 / 400 = 800 * 2 / 400 = 1600 / 400 = 4