2016-10-03 53 views
0

所以我几乎完成了我的程序,但我不断收到一分钱。例如,当我输入$ 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; 

}

+3

最有可能是因为[你正在使用的'浮点'数学已损坏](http://stackoverflow.com/questions/588004/is-floating-point-math-broken)。此外,这太过于工程设计了。正确的答案最多只需要这个代码的四分之一。这将包括处理“浮动”问题。 –

+3

典型的解决方案是将所有东西都乘以100,并以整数和分数操作。是的便士,你愚蠢的拼写检查。为什么我会想要阴茎? – user4581301

+1

@ user4581301(͡°͜ʖ͡°) – erip

回答

0

正如另一则留言中提到,这是很简单的总变化为int,total = amount_tendered*100 - cost_of_item*100;,并从那里工作。