当输入4.2时,我的代码中无法找出错误,因为更改将是420,而是现在是419.我的代码出了什么问题?
#include<stdio.h>
#include<cs50.h>
int evaluate(int change){
int quarter,dime,nickel,penny;
int coins = 0;
quarter = change/25;
change = change%25;
printf("quarters:%d\n" ,quarter);
printf("change left: %d\n",change);
dime = change/10;
change = change%10;
printf("dimes:%d\n" ,dime);
printf("change left: %d\n",change);
nickel = change/5;
change = change%5;
printf("nickels:%d\n" ,nickel);
printf("change left: %d\n",change);
penny = change;
coins = quarter+dime+nickel+penny;
printf("pennies:%d\n" ,penny);
printf("change left: %d\n",change);
return coins;
}
int main()
{
printf("How much:");
float input = GetFloat();
int coin = 0;
while(true)
{
if(input>0)
{
int change = (100*input);
printf("change: %d\n",change);
coin = evaluate(change);
printf("%d\n",coin);
return 0;
}
else
{
printf("are you serious? retry:");
input = GetFloat();
} }
}
该计划旨在评估出纳员必须向客户提供的最少数量的硬币。问题是,在输入4.2时,输出出错了;另外change=100*input
的输入为419,输入为4.2。请帮我弄清楚问题。
答案 0 :(得分:2)
4.2
。当您将其乘以100
时,它会给出一个略小于420
的数字。将其转换为整数会产生419
。
您可以通过使用以下内容对转化前的数字进行四舍五入来防止这种情况:
int n = round(number);
或者通过添加舍入调整:
int n = (int)(number + 0.5);
请勿使用float
进行此计算,请使用正确舍入的分数,如此答案所述:Integer overflow in greedy coin counting。