Mit der folgenden einfachen C++leicht unterschiedliche Antworten beim Wechsel Assoziativität
#include <iostream>
using namespace std;
int main()
{
int euro, cents_v1, cents_v2, do_again;
double price;
do_again = 1;
while(do_again != 0){
cout<<"Insert price in Euro with cents"<<endl;
cin>>price;
euro = price;
cents_v1 = price*100 - euro*100;
cents_v2 = (price - euro) * 100;
cout<<"Total: "<<euro<<" euro and "<<cents_v1<<" cents"<< endl;
cout<<"Total: "<<euro<<" euro and "<<cents_v2<<" cents"<< endl;
cout <<"\nDo it again? 1: yes, 0: no."<<endl;
cin>>do_again;
}
return 0;
}
Sie ausüben können zwei verschiedene Antworten erhalten, wenn der Eingang ist, zum Beispiel 31.13:
Insert price in Euro with cents
31.13
Total: 31 euro and 13 cents
Total: 31 euro and 12 cents
Do it again? 1: yes, 0: no.
Wie damit umgehen Problem? Gibt es eine Regel bei der Programmierung, um dieses Problem in komplizierteren Situationen zu vermeiden oder zu kontrollieren?
Die Standardantwort auf diese Frage [Was jeder Informatiker über Fließkomma wissen sollte] (https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) –
FP-Ergebnisse in konvertieren Ganzzahlen können aufgrund der Kürzung stark leiden. Rundung vorschlagen. 'cents_v1 = rund (Preis * 100 - euro * 100);' – chux