我使用两个不同的变量将计算与int
和double
中的变量分开。当我使用类似的东西时,这些工作正常:
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
的结果。
答案 0 :(得分:6)
你正在进行整数除法 - 它向下舍入。
因此:
cost / 400
返回零,因为cost = 40
和40 / 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