我的代码不会绕过我的浮动

时间:2018-06-19 16:36:06

标签: c rounding cs50

在修改了语法并仔细阅读了有关浮点数不精确性的博客之后,我以为我想对数字进行四舍五入就算是对了。但是,当我在终端中输入0.41时,会出现运行时错误,而不是到达41p所需的4个硬币。

我的语法/公式对舍入浮点数是否正确?

//Prompt user for an amount of change
do
{
    dollars = get_float("change owed: ");
}
while (dollars < 0);

//convert float (dollars) to integer (cents) and then round
int cents = round(dollars * 100);

int coins = 0;
while (cents >= 25)
{
    coins++;
    cents-= 25;
}

while (cents >= 10)
{
    coins++;
    cents -=10;
}

while (cents >= 5)
{
    coins++;
    cents +=5;
}

while (cents >= 1)
{
    coins++;
    cents -=1;
}

printf("%i\n", coins);

}

我收到此错误消息-运行时错误:有符号整数溢出:2147483646 + 5无法以类型'int'表示 429496731

1 个答案:

答案 0 :(得分:3)

更改

cents +=5;

cents -=5;

也就是说-请勿将float用于此类问题。将输入作为字符串读取,然后直接转换为intunsigned int