gpt4 book ai didi

c - 为什么 100 * 4.2 结果是 419 而不是 420?

转载 作者:行者123 更新时间:2023-11-30 21:20:15 24 4
gpt4 key购买 nike

当输入 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输入为 4.2 时,结果为 419。请帮我解决问题。

Code on left side and output on right.

最佳答案

4.2 无法用您平台上使用的二进制浮点格式精确表示。当您将其乘以 100 时,会得到一个略小于 420 的数字。将其转换为整数会产生 419

您可以通过在转换前对数字进行四舍五入来防止出现这种情况:

int n = round(number);

或者通过添加舍入调整:

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

不要使用float进行此计算,请使用正确舍入的美分数量,如本答案所述:Integer overflow in greedy coin counting .

关于c - 为什么 100 * 4.2 结果是 419 而不是 420?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41017764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com