奇数的简单除法在C编程中不起作用

奇数的简单除法在C编程中不起作用,c,C,我肯定我遗漏了一些非常简单的东西,因为我对这个非常陌生,但是由于某种原因,当我将一个奇数除以2,然后乘以结果时,程序只会乘以向下舍入的数字,例如,当我将5除以2,然后再乘以它时,它只会乘以2,而不是2.5。我最终要做的是让它四舍五入,这样5除以2就会变成3,但不管出于什么原因,它现在会自动四舍五入。这是我的密码: #include <stdio.h> #include <math.h> int main() { int num_containers; f

我肯定我遗漏了一些非常简单的东西,因为我对这个非常陌生,但是由于某种原因,当我将一个奇数除以2,然后乘以结果时,程序只会乘以向下舍入的数字,例如,当我将5除以2,然后再乘以它时,它只会乘以2,而不是2.5。我最终要做的是让它四舍五入,这样5除以2就会变成3,但不管出于什么原因,它现在会自动四舍五入。这是我的密码:

#include <stdio.h>
#include <math.h>

int main() {
    int num_containers;
    float price, total, num_half;

printf("What is the cost of one container?\n");
scanf("%f", &price);

printf("How many containers are you buying?\n");
scanf("%d", &num_containers);

num_half = num_containers / 2;
total = num_half * price;

if(num_containers % 2 == 0)
    printf("The total cost is $%.2f.\n", num_containers / 2 * price);
else
    printf("The total cost is $%f.\n", num_containers / 2 * price);

return 0;
}
#包括
#包括
int main(){
集装箱数量;
浮动价格,总计,数量的一半;
printf(“一个集装箱的成本是多少?\n”);
scanf(“%f”和“价格”);
printf(“您要购买多少个集装箱?\n”);
scanf(“%d”和num_容器);
num_half=num_容器/2;
总计=数量的一半*价格;
if(num_容器%2==0)
printf(“总成本为$%.2f.\n”,num_容器/2*价格);
其他的
printf(“总成本为$%f.\n”,数量容器/2*价格);
返回0;
}

num\u containers
被定义为int,当您将其除以2时,它将向下舍入。

这是因为
num\u containers
被定义为int。如果您执行包含int和float的操作,结果将成为float。你把一个整数除以一个整数,结果就是一个整数


如果需要浮点结果,请首先将
num_containers
强制转换为浮点,或者,如果总是除以文字“2”,则将其更改为2.0f

变量
num\u containers
是一个整数,因此表达式
num\u containers/2
将解析为舍入整数值。如果将其声明为
float num_containers
,则应该会得到所需的结果,或者可以在表达式中使用它时将其转换为浮点值。例如:

num_half = (float) num_containers / 2;
表情

num_containers / 2;
0.5 * num_containers;
由于两个操作数都是整数,因此计算结果为整数除法。无法用整数表示剩余的
0.5
,因此它丢失了

作为比较,表达式

num_containers / 2;
0.5 * num_containers;
包含一个浮点文本,因此
num\u containers
首先升级为double,结果是double(
num\u containers/2.0
也这样做)

由于除了
num_containers
之外的所有内容都是一个浮点值,因此跳过中间值将有效:

total = num_containers * price / 2;

注意,为了强制取整,您可以使用

或者留在整数区域,只需添加一个:

int more_than_half = (num_containers + 1) / 2;

如果要在整数算术中使用四舍五入除法,请在进行除法之前添加调整。例如,要除以10并取整,请先加5。在你除以2的情况下

num_half = (num_containers + 1) / 2;

它将把5/2四舍五入到3。

如果您想在整数算术中进行四舍五入除法,请在除法之前添加一个调整。例如,若要除以
10
并取整,请先添加
5
。若要除以2,请先添加1。num_half=(num_容器+1)/2;OP表示,他希望5/2得到一个四舍五入的3。如果你愿意,你可以删除或编辑你的答案。稍后我将删除此注释和上一条注释。“如果执行包括int和float在内的操作…”整数将被提升。问题是在这种情况下,两个操作数都是整数。你说得对,我把所有的字都搞错了。编辑为更清晰。商为正时向下舍入,否则向上舍入。IAC,该分数被丢弃。