2016-10-03 20 views
0

私はほとんどプログラムで終わっていますが、私は1ペニーをオフにしています。たとえば、商品の費用として$ 6.01と入札金額として$ 10.00を入力すると、私は$ 3.99という結果を得ますが、金額は3ドル1ドル、3/4、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)。しかも、これはあまりにも過剰に設計されています。正解には、おそらくこのコードの4分の1が必要です。これには 'float'の問題が含まれます。 –

+3

典型的な解決策は、すべてを100倍にし、整数とペニーで動作させることです。はいペニー、あなたは愚かなスペルチェッカーです。なぜ私はペニスを望むのだろうか? – user4581301

+1

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

答えて

0

別のコメントで述べたように、intにあなたの合計を変更することがはるかに簡単ですtotal = amount_tendered*100 - cost_of_item*100;、そこから仕事。

関連する問題