我写了这段代码:
float suma;
int centy;
int cele;
printf("Zadaj sumu a ja ti ju napisem a zaroven aj vysklonujem:\n");
scanf("%f",&suma);
cele=(int)suma;
centy= (suma-cele)*100;
switch ((int)suma) {
case 1:
printf("%d euro",(int)suma);
break;
case 2 ... 4:
printf("%d eura",(int)suma);
break;
default:
printf("%d eur",(int)suma);
break;
}
switch (centy) {
case 1:
printf(" a %d cent\n",centy);
break;
case 2 ... 4:
printf(" a %d centy\n",centy);
break;
default:
printf(" a %d centov\n",centy);
break;
}
但是当我键入5.56时,它会说我在控制台中键入了5.55。你怎么看。我应该改变什么?我是新手所以...
答案 0 :(得分:1)
使用浮点数时,您必须更正舍入错误。一种常用的简单方法是在转换为int之前添加0.5。所以,这样的事情应该会更好:
centy= (int) (0.5 + suma * 100.0) - cele * 100;
将输入作为字符串读取并使用“。”将其解析为欧元和美分可能更好。作为分隔符。但这将使代码轻松工作。当你不需要精确的精确度时,通常可以添加0.5,但足够接近就可以了。