C++更改程序
问题描述:
所以我几乎完成了我的程序,但我不断收到一分钱。例如,当我输入$ 6.01作为项目的成本,$ 10.00作为投标的金额时,我得到的结果是3.99美元,但面额来自3美元的钞票,3个季度,2个硬币和3个便士(应该是4个) 。我怎样才能解决这个问题?C++更改程序
static int assignment_change() {
//Variables
float cost_of_item, amount_tendered, total;
int change, pennies, nickels, dimes, quarters, dollar, five_dollars;
//Input
std::cout << "What was the cost of the item ($0.00 - $20.00)? $";
std::cin >> cost_of_item;
std::cout << "What was the amount tendered (Max $20.00)? $";
std::cin >> amount_tendered;
if (cost_of_item <= 20 && cost_of_item >= 0 && amount_tendered <= 20 && amount_tendered >= 0 && amount_tendered > cost_of_item)
{
//Formulas
total = amount_tendered - cost_of_item;
change = (int)total * 100;
five_dollars = change/500;
change %= 500;
dollar = change/100;
change %= 100;
quarters = change/25;
change = change % 25;
dimes = change/10;
change %= 10;
nickels = change/5;
change %= 5;
pennies = change/1;
change %= 1;
//Output
//-----------------------------------------------------------
if (five_dollars >= 1)
std::cout << five_dollars << " five dollar bills" << std::endl;
else if (five_dollars == 0)
std::cout << "";
//-----------------------------------------------------------
if (dollar > 1)
std::cout << dollar << " one dollars bills" << std::endl;
else if (dollar == 0)
std::cout << "";
else if (dollar == 1)
std::cout << dollar << " one dollar bill" << std::endl;
//-----------------------------------------------------------
if (quarters > 1)
std::cout << quarters << " quarters" << std::endl;
else if (quarters == 0)
std::cout << "";
else if (quarters == 1)
std::cout << quarters << " quarter" << std::endl;
//-----------------------------------------------------------
if (dimes > 1)
std::cout << dimes << " dimes" << std::endl;
else if (dimes == 0)
std::cout << "";
else if (dimes == 1)
std::cout << dimes << " dime" << std::endl;
//-----------------------------------------------------------
if (nickels > 1)
std::cout << nickels << " nickels" << std::endl;
else if (nickels == 0)
std::cout << "";
else if (nickels == 1)
std::cout << nickels << " nickel" << std::endl;
//-----------------------------------------------------------
if (pennies > 1)
std::cout << pennies << " pennies" << std::endl;
else if (pennies == 0)
std::cout << "";
else if (pennies == 1)
std::cout << pennies << " penny" << std::endl;
//-----------------------------------------------------------
//std::cout << fixed << setprecision(2) << "Change from $" << amount_tendered << " for a cost of $" << cost_of_item << " is" << std::endl;
std::cout << "Total is " << total << std::endl;
}
else
std::cout << "*****Your input for the cost of the item or the amount that was to be tendered was outside the designated range.*****" << std::endl;
return 0;
}
答
正如另一则留言中提到,这是很简单的总变化为int,total = amount_tendered*100 - cost_of_item*100;
,并从那里工作。
最有可能是因为[你正在使用的'浮点'数学已损坏](http://*.com/questions/588004/is-floating-point-math-broken)。此外,这太过于工程设计了。正确的答案最多只需要这个代码的四分之一。这将包括处理“浮动”问题。 –
典型的解决方案是将所有东西都乘以100,并以整数和分数操作。是的便士,你愚蠢的拼写检查。为什么我会想要阴茎? – user4581301
@ user4581301(͡°͜ʖ͡°) – erip