C 为什么100*4.2显示为419而不是420?

C 为什么100*4.2显示为419而不是420?,c,cs50,C,Cs50,当输入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\

当输入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*输入值为419,输入值为4.2。请帮我解决这个问题

4.2不能用您平台上使用的二进制浮点格式精确表示。当你把它乘以100时,它给出的数字略小于420。将其转换为整数将得到419

可以通过在转换之前使用以下方法对数字进行四舍五入来防止出现这种情况:

int n = round(number);
或通过添加舍入调整:

int n = (int)(number + 0.5);

此计算中不要使用float,请使用正确的四舍五入金额,如以下答案所述:。

寻求调试帮助的问题此代码为什么不起作用?必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建一个最小的、完整的和可验证的示例。不要将链接发布到图像,而是将代码发布到此处。将代码作为代码而不是图像发布。你想得到帮助的人不会在这个问题上浪费时间。你是否尝试过将输入四舍五入100.0倍?我猜现在你的代码正在截断419.99。教你提问的最佳方式不要把代码当作图片发布,使用相关的标题是有帮助的,而你嘲笑抱怨的人正试图帮助你。