

#include <stdio.h>
float count_discount(int x, float y,float pay)
{
double sum;
if (y<(200/8.38))
{
sum = y * 0.3;// 每升优惠3毛
if (x == 5) // 星期五每升额外优惠1毛
sum += y * 0.1;
}
else if (y==(200/8.38))
{
sum = 0;
}
else
{
y = y - (200 / 8.38);
sum = y * 0.3;// 每升优惠3毛
if (x == 5) // 星期五每升额外优惠1毛
sum += y * 0.1;
}
sum = (int)(sum*100.0 + 0.5) / 100.0;
return sum;
}
float coupondiscount(float a)
{
if (a>=200)
{
return 20;
}
else
{
return 0;
}
}
int main()
{
int t, x;
float y;
float pay, discount;
scanf("%d", &t);
while (t--)
{
scanf("%d", &x);
scanf("%f", &y);
pay =(int)((8.38 * y)*100+0.5)/100.0;
discount = count_discount(x, y,pay);
if (pay >= 200)
pay -= 20;
pay = pay - discount;
printf("Order amount: %.2f\n", (int)(8.38 * y*100.0+0.5)/100.0);
printf("E-coupon discount amount: %.2f\n", coupondiscount((int)((8.38 * y) * 100 + 0.5) / 100.0));
printf("Discount amount: %.2f\nPayment amount: %.2f\n", discount, pay);
}
return 0;
}

下面一样的道理,你这么写变成整数了,并不像你想的那样先取整然后再除以100.你应该整体按照float计算,最后的结果在输出里面使用格式控制取几位小数
#include <stdio.h>
double round(double x){
return ((int)(x * 100 + 0.5)) / 100.0;
}
float count_discount(int x, float y)
{
float sum;
if (y<(200/8.38))
{
sum = y * 0.3;// 每升优惠3毛
if (x == 5) // 星期五每升额外优惠1毛
sum += y * 0.1;
}
else if (y==(200/8.38))
{
sum = 0;
}
else
{
y = y - (200 / 8.38);
sum = y * 0.3;// 每升优惠3毛
if (x == 5) // 星期五每升额外优惠1毛
sum += y * 0.1;
}
sum = round(sum);
return sum;
}
float coupondiscount(float a)
{
if (a>=200)
{
return 20;
}
else
{
return 0;
}
}
int main()
{
int t, x;
float y;
//printf("%.2lf",round(199.996));
float pay, discount;
float order_count;
scanf("%d", &t);
while (t--)
{
scanf("%d", &x);
scanf("%f", &y);
pay =round(8.38 * y);
//pay =8.38 * y;
order_count = pay;
discount = count_discount(x, y);
if (pay >= 200)
pay -= 20;
pay = pay - discount;
//printf("%lf\n",pay);
printf("Order amount: %.2f\n", round(order_count));
printf("E-coupon discount amount: %.2f\n", coupondiscount(round(order_count)));
printf("Discount amount: %.2f\nPayment amount: %.2f\n", round(discount), round(pay));
}
return 0;
}