私は単純なC++気圧のプログラムを作ってるんだが、私は預金をするか、撤退後のバランスが変化してもらうとのトラブルを抱えています。単純なC++ ATM(変数入力のバランスをとる格納することはできません)
// C++ ATM
#include "std_lib_facilities.h"
int main()
{
bool card_is_inserted = false;
double balance = 0.0;
//double new_balance = balance;
// HOME
//Starts over if variable is false
while (card_is_inserted == false)
{
cout << "Wellcome to Well's Fargo ATM " << '\n'
<< "Insert card Yes or No"<< endl;
string request;
getline(cin,request);
// Function is needed for aceppting different no's and yes's
//-=-=-=--=-==--=-=-==-==-=--==--=-=-
// loads atm
if (request == "yes")
{
cout << "Alright, Your current balance is:" << endl
<< balance << endl;
card_is_inserted = true;
}
// home
string option = "cancel";
while (card_is_inserted == true)
{
cout << "Would you like to withdraw or deposit? (Cancel)"<< endl;
getline(cin,option);
double cash_ = 0;
if (option == "deposit")
{
cout << "How much money would you like to deposit?" << endl;
cin >> cash_;
double new_deposit_balance = balance + cash_;
cout << "You placed: $" << cash_ << endl
<< "Your New Balance is: $" << new_deposit_balance << endl;
}
if (option == "withdraw")
{
cout << "How much money would you like to withdraw?" << endl;
cin >> cash_;
double new_witdraw_balance = balance - cash_;
if(balance <= 0)
{
cout << "You don't have: $" << cash_ << endl;
}
else
{
cout << "You toke: $" << cash_ << endl
<< "Your New Balance is: $"<< new_witdraw_balance << endl;
}
}
if (option == "cancel")
{
cout << "Ok, bye" << endl;
card_is_inserted = false;
}
}
}
}
例:私は預金を作る(または撤退)するには、yesを入力し、12.50のようなシンプルなダブルを置き、それは私に12.50になります私の現在の残高を示しています。その後私は.50を残して12.00を撤回したい。しかし、バランス変数に以前の値の12.50が格納されていないため、私は傾けることができません。私は "double new_balance = balance"を作ろうとしましたが、速やかに動作しません。
高度なトピックノートです。精度がお金バランスのように、必要とされる場所 'お金のために使用されることはありませんdouble' double'は(0.1000000000000000055511151231257827021181583404541015625''としてdouble' 'に格納されて0.1''例えばのように、正確にすべての一般的な金額を表すことができない 'として、量それは 'double'で' 0.1'に近づくかもしれません)。 (そしてこれらの誤差が蓄積する可能性がありますので、10回の0.1回の預金を行い、10回ごとに1.0を撤回する場合、残高はゼロではなく+0.5(または+ 5、10e18の土地がわからない))。 – Ped7g
私はそれを見ましたが、それを修正する方法についてはわかりません。今私はタイプされた文字の数を制限しようとしているので、誰も9,100回は入力しません。もしあなたが私に偉大なヒントを与えることができたら。 – Pep3
それは些細な話題ではなく、現時点ではそれほど心配する必要はありません。ちょっと空き時間(おそらく[this](http://floating-point-gui.de/)を読んで、コンピュータの仕組みを完全に理解していることを確認してください整数型(ビット数で最小値/最大値を定義する方法)を使用すると、FP IEEE 754がどのように機能するかを知ることができます。コンピュータの計算上の限界を完全に理解し、算術演算を順序付けて、合計誤差。バランスを取りながら、フォーマッタを小数点以下2桁に設定してください: 'cout.precision(2);'これはしばらくの間エラーを隠します。 – Ped7g