在修改了语法并仔细阅读了有关浮点数不精确性的博客之后,我以为我想对数字进行四舍五入就算是对了。但是,当我在终端中输入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
答案 0 :(得分:3)
更改
cents +=5;
到
cents -=5;
也就是说-请勿将float用于此类问题。将输入作为字符串读取,然后直接转换为int
或unsigned int