C 我错在哪里?我不知道';我们得不到预期的产出

C 我错在哪里?我不知道';我们得不到预期的产出,c,rounding,C,Rounding,我试着根据问题来编写代码。但我面临着取整问题。谁能解释一下我在哪里面对这个问题吗 M=12,T=20,X=8 tip=(20×12)/100=2.4 tax=(8×12)/100=0.96最终值 价格=12+2.4+0.96=15.36正式来说,这顿饭的价格是15.36美元, 但是四舍五入到最近的 美元(整数),这顿饭是15美元 以下是我的完整代码: #include <stdio.h> #include <string.h> #include <math.h>

我试着根据问题来编写代码。但我面临着取整问题。谁能解释一下我在哪里面对这个问题吗

M=12,T=20,X=8 tip=(20×12)/100=2.4 tax=(8×12)/100=0.96最终值 价格=12+2.4+0.96=15.36正式来说,这顿饭的价格是15.36美元, 但是四舍五入到最近的 美元(整数),这顿饭是15美元

以下是我的完整代码:

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

int main() {
    int t, x;
    double m;
    scanf("%lf", &m);
    scanf("%d", &t);
    scanf("%d", &x);
    double tip, tax;

    tip= m*t/100;
    tax= t*x/100;
    int total= (int)(round( tip + tax +m ));

    printf("The final price of the meal is $%d.", total);
    return 0;
}
#包括
#包括
#包括
#包括
int main(){
int t,x;
双m;
扫描频率(“%lf”和&m);
scanf(“%d”、&t);
scanf(“%d”和&x);
双倍小费,税金;
尖端=m*t/100;
税=t*x/100;
整数总计=(整数)(四舍五入(小费+税金+m));
printf(“膳食的最终价格为$%d.”,总计);
返回0;
}
当我输入
15.91,15,10
时,它显示的是输出
19
,而不是
20

我在哪里犯了错误

当你这样做时
tax=t*x/100
您正在进行整数除法,因此将对其进行四舍五入

您将拥有15*10/100=1,而不是1.5

另外,当您提出问题时,您使用的是
t*x
,而不是
m*x

M=12, T=20, X=8 
tip=(20×12)/100=2.4 
     T  M
tax=(8×12)/100=0.96 
     X M
换成

tip=m*t/100.0;
税=m*x/100.0


你会得到预期的20作为最终结果

为什么税是以t而不是m计算的?不,这不是你的完整代码。
t
x
没有申报。我把它输入我的计算器,发现
tip+tax+m
是192965。请注意,
tax=t*x/100
是一个整数运算,四舍五入为1。正如@Jack已经提到的。似乎
tax=t*x/100应为
tax=m*x/100。这将得到预期的<代码> 20美元<代码>结果。请考虑输入<代码> 12 20×8 /代码>输出将是<代码> 15 < /代码>,但您的代码显示“代码> 16 < /代码>。您编写代码的方式只会通过一个测试用例,但在其他测试用例中会失败。不,这是错误的。因为
m
t
x
被定义为
double
,所以除法将是浮点运算,即使没有
100.0
,我也实现了java和python的相同逻辑,而且它工作得很好。但它显示了错误的输出C@CraigEstey
t
x
都是
int
,我和她一起测试了第一个例子,得到了1而不是1.5你是正确的
100
[仅]适用于
tip
,但为了保持一致性,最好使用
100.0
。我也进行了测试,但[错误地]到处都使用了
double