Я пишу функцию для класса, которая берет сумму денег и сообщает пользователю, сколько монет добавляется к этой сумме. Кажется, у меня все работает нормально, кроме пенни. Моя петля иногда останавливается и прерывается, прежде чем добавлять правильную сумму. Обычно он останавливается на 1 пенни, но иногда он дает мне правильный ответ (одно значение, которое я нашел, дает правильный ответ .09). Я попытался изменить float на double, и у меня такая же проблема. Я вытаскиваю свои волосы, пытаясь понять, что я делаю неправильно.Почему моя петля ломается раньше?
void change(float total)
{
int quarters, dimes, nickels, pennies;
quarters = 0;
dimes = 0;
nickels = 0;
pennies = 0;
printf("\nTotal value entered: %.2f", total);
while (total >= .25)
{
quarters += 1;
total -= .25;
}
while (total >= .10)
{
dimes += 1;
total -= .10;
}
while (total >= .05)
{
nickels += 1;
total -= .05;
}
while (total >= .01)
{
pennies += 1;
total -= .01;
}
printf("\nQuarters: %d \nDimes: %d \nNickels: %d \nPennies: %d\n\n", quarters, dimes, nickels, pennies);
}
Вы можете сказать нам, для которых значения 'total' является проблема воспроизводится, пожалуйста? –
Множество десятичных чисел (включая 0,1, 0,05 и 0,01) не точно представлены в плавающей точке, а ошибки складываются. –
Это может быть связано с точностью 'float'. То, что вы можете сделать, - это обрабатывать деньги в «центах», а не «долларах». – wendelbsilva