Ergebnis 1 bis 7 von 7

Thema: foat ist falsch

  1. #1
    Youngster
    Registriert seit
    23.08.2009
    Beiträge
    10
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard foat ist falsch

    Mein Problem ist das der float einen falschen Wert hat.
    Der float ist dann z.B. 0.1000000001 anstatt einfach 0.1000000000.
    Was kann man da machen?

    Hier mein Code.

    Code:
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int wahl = 0;
        float preis = 0.0, einwurf1 = 0.0;
        cout << "Getraenkeautomat" << endl;
        cout << "Waehlen sie ihr Getraenk aus:" << endl;
        cout << "1. Wasser (0,50 Euro)" << endl;
        cout << "2. Limonade (1,00 Euro)" << endl;
        cout << "3. Bier (2,00 Euro)" << endl << endl;
        cout << "Bitte waehlen sie ein Getraenk aus: ";
        cin >> wahl;
        if (wahl == 1 || wahl == 2 || wahl == 3)
        {
            switch(wahl)
            {
                case 1:
                    preis = 0.50;
                    cout << "Sie haben 1. Wasser gewaehlt. Bitte zahlen sie (0,50 Euro)" << endl;
                    cout << "Einwurf: ";
                    cin >> einwurf1;
                    if (einwurf1 == preis)
                    {
                        cout << "Danke. Bitte entnehmen sie ihr Getraenk!";
                        break;
                    }
                    else if (einwurf1 < preis)
                    {
                        float rest = preis - einwurf1;
                        float rueckgabe = 0.0;
                        do
                        {
                            float einwurf2 = 0.0;
                            cout << "Es fehlen: " << rest << endl;
                            cout << "Einwurf: ";
                            cin >> einwurf2;
                            rueckgabe = einwurf1 + einwurf2;
                            rest -= einwurf2;
                            einwurf1 = 0.0;
                        }while (rest > 0.00);
                        if (rueckgabe == preis)
                        {
                            cout << "Danke. Bitte entnehmen sie ihr Getraenk!";
                        }else if (rueckgabe > preis)
                        {
                            cout << "Danke. Bitte entnehmen sie ihr Getraenk!" << endl;
                            cout << "Ihr Wechselgeld betraegt: " << rueckgabe - preis;
                        }
                        //cout << "Es fehlen: " << preis - einwurf1 << endl;
                        //cout << "Schade versuchen sie es wenn sie genug Geld haben";
                        break;
                    }
                    else if (einwurf1 > preis)
                    {
                        cout << "Danke. Bitte entnehmen sie ihr Getraenk!" << endl;
                        cout << "Ihr Wechselgeld betraegt: " << einwurf1 - preis << " Euro" << endl;
                        break;
                    }
                case 2:
                    preis = 1.00;
                    cout << "Sie haben 2. Limonade gewaehlt. Bitte zahlen sie (1,00 Euro)" << endl;
                    cout << "Einwurf: ";
                    cin >> einwurf1;
                    if (einwurf1 == preis)
                    {
                        cout << "Danke. Bitte entnehmen sie ihr Getraenk!";
                        break;
                    }
                    else if (einwurf1 < preis)
                    {
                        cout << "Es fehlen: " << preis - einwurf1 << endl;
                        cout << "Schade versuchen sie es wenn sie genug Geld haben";
                        break;
                    }
                    else if (einwurf1 > preis)
                    {
                        cout << "Danke. Bitte entnehmen sie ihr Getraenk!" << endl;
                        cout << "Ihr Wechselgeld betraegt: " << einwurf1 - preis << " Euro" << endl;
                        break;
                    }
                case 3:
                    preis = 2.00;
                    cout << "Sie haben 3. Bier gewaehlt. Bitte zahlen sie (2,00 Euro)" << endl;
                    cout << "Einwurf: ";
                    cin >> einwurf1;
                    if (einwurf1 == preis)
                    {
                        cout << "Danke. Bitte entnehmen sie ihr Getraenk!";
                        break;
                    }
                    else if (einwurf1 < preis)
                    {
                        cout << "Es fehlen: " << preis - einwurf1 << endl;
                        cout << "Schade versuchen sie es wenn sie genug Geld haben";
                        break;
                    }
                    else if (einwurf1 > preis)
                    {
                        cout << "Danke. Bitte entnehmen sie ihr Getraenk!" << endl;
                        cout << "Ihr Wechselgeld betraegt: " << einwurf1 - preis << " Euro" << endl;
                        break;
                    }
            }
        } else { cout << "Falsche Eingabe!";}
        getchar();
        getchar();
    return 0;
    }
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Youngster
    Themenstarter

    Registriert seit
    23.08.2009
    Beiträge
    10
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: float ist falsch

    Hier noch eben fix überarbeitet.
    Code:
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int wahl = 0;
        float preis = 0.0, einwurf1 = 0.0;
        cout << "Getraenkeautomat" << endl << endl;
        cout << "1. Wasser (0,50 Euro)" << endl;
        cout << "2. Limonade (1,00 Euro)" << endl;
        cout << "3. Bier (2,00 Euro)" << endl << endl;
        cout << "Bitte waehlen sie ein Getraenk aus: ";
        cin >> wahl;
        cout << endl;
        if (wahl == 1 || wahl == 2 || wahl == 3)
        {
            switch(wahl)
            {
                case 1:
                    preis = 0.50;
                    cout << "Sie haben 1. Wasser gewaehlt. Bitte zahlen sie (0,50 Euro)" << endl << endl;
                    cout << "Einwurf: ";
                    cin >> einwurf1;
                    cout << endl;
                    if (einwurf1 == preis)
                    {
                        cout << "Danke. Bitte entnehmen sie ihr Getraenk!";
                        break;
                    }else if (einwurf1 < preis)
                    {
                        float rest = preis - einwurf1;
                        float rueckgabe = 0.0;
                        do
                        {
                            float einwurf2 = 0.0;
                            cout << "Es fehlen: " << rest << " Euro" << endl << endl;
                            cout << "Einwurf: ";
                            cin >> einwurf2;
                            cout << endl;
                            rueckgabe = einwurf1 + einwurf2;
                            rest -= einwurf2;
                            einwurf1 = 0.0;
                        }while (rest > 0.00); //(rueckgabe != preis || rueckgabe > preis);
                        if (rueckgabe == preis)
                        {
                            cout << "Danke. Bitte entnehmen sie ihr Getraenk!";
                        }else if (rueckgabe > preis)
                        {
                            cout << "Danke. Bitte entnehmen sie ihr Getraenk!" << endl;
                            cout << "Ihr Wechselgeld betraegt: " << rueckgabe - preis << " Euro";
                        }
                        break;
                    }else if (einwurf1 > preis)
                    {
                        cout << "Danke. Bitte entnehmen sie ihr Getraenk!" << endl;
                        cout << "Ihr Wechselgeld betraegt: " << einwurf1 - preis << " Euro" << endl;
                        break;
                    }
                case 2:
                    preis = 1.00;
                    cout << "Sie haben 2. Limonade gewaehlt. Bitte zahlen sie (1,00 Euro)" << endl << endl;
                    cout << "Einwurf: ";
                    cin >> einwurf1;
                    cout << endl;
                    if (einwurf1 == preis)
                    {
                        cout << "Danke. Bitte entnehmen sie ihr Getraenk!";
                        break;
                    }else if (einwurf1 < preis)
                    {
                        cout << "Es fehlen: " << preis - einwurf1 << endl;
                        cout << "Schade versuchen sie es wenn sie genug Geld haben";
                        break;
                    }else if (einwurf1 > preis)
                    {
                        cout << "Danke. Bitte entnehmen sie ihr Getraenk!" << endl;
                        cout << "Ihr Wechselgeld betraegt: " << einwurf1 - preis << " Euro" << endl;
                        break;
                    }
                case 3:
                    preis = 2.00;
                    cout << "Sie haben 3. Bier gewaehlt. Bitte zahlen sie (2,00 Euro)" << endl << endl;
                    cout << "Einwurf: ";
                    cin >> einwurf1;
                    cout << endl;
                    if (einwurf1 == preis)
                    {
                        cout << "Danke. Bitte entnehmen sie ihr Getraenk!";
                        break;
                    }else if (einwurf1 < preis)
                    {
                        cout << "Es fehlen: " << preis - einwurf1 << endl;
                        cout << "Schade versuchen sie es wenn sie genug Geld haben";
                        break;
                    }else if (einwurf1 > preis)
                    {
                        cout << "Danke. Bitte entnehmen sie ihr Getraenk!" << endl;
                        cout << "Ihr Wechselgeld betraegt: " << einwurf1 - preis << " Euro" << endl;
                        break;
                    }
            }
        }else { cout << "Falsche Eingabe!";}
        getchar();
        getchar();
    return 0;
    }
    Ich habe eingegeben: 0.3

    doch die variable hat dann den Wert:
    einwurf1 0.30000001 float

  3. #3
    Forum Guru Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: foat ist falsch

    Richtig exakt geht es nicht.
    Variante 1:
    Code:
    cout.precision(6);
    cout << 0.3f << endl;
    Variante 2: double benutzen, wenn du mehr Genauigkeit brauchst.

  4. #4
    Youngster
    Themenstarter

    Registriert seit
    23.08.2009
    Beiträge
    10
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: float ist falsch

    Ah ok danke für die schnelle Antwort.
    Hab das jetzt etwas anders gelöst.

    Mein fertiges Programm.

    Code:
    #include <iostream>
    #include <cmath> 
    
    using namespace std;
    
    const float preiswasser = 0.5;
    const float preislimonade = 1.0;
    const float preisbier = 2.0;
    
    double round(double value, int precision)
    {
        double multiplier(pow(10.0, precision));
        return floor(value * multiplier  + 0.5) / multiplier;
    }
    
    int main()
    {
        int wahl = 0;
        float einwurf1 = 0;
        cout << "Getraenkeautomat" << endl << endl;
        cout << "1. Wasser " << preiswasser << " Euro" << endl;
        cout << "2. Limonade " << preislimonade << " Euro" << endl;
        cout << "3. Bier " << preisbier << " Euro" << endl << endl;
        cout << "Bitte waehlen sie ein Getraenk aus: ";
        cin >> wahl;
        cout << endl;
        if (wahl == 1 || wahl == 2 || wahl == 3)
        {
            switch(wahl)
            {
                case 1:
                    cout << "Sie haben 1. Wasser gewaehlt. Bitte zahlen sie " << preiswasser << " Euro" << endl << endl;
                    cout << "Einwurf: ";
                    cin >> einwurf1;
                    cout << endl;
                    if (einwurf1 == preiswasser)
                    {
                        cout << "Danke. Bitte entnehmen sie ihr Getraenk!";
                        break;
                    }else if (einwurf1 < preiswasser)
                    {
                        float rest = preiswasser - einwurf1;
                        float rueckgabe = 0;
                        do
                        {
                            float einwurf2 = 0;
                            cout << "Es fehlen: " << rest << " Euro" << endl << endl;
                            cout << "Einwurf: ";
                            cin >> einwurf2;
                            cout << endl;
                            rueckgabe += (einwurf1 + einwurf2);
                            rest = round(rest - einwurf2, 2);
                            einwurf1 = 0;
                        }while (rest > 0);
                        if (rueckgabe == preiswasser)
                        {
                            cout << "Danke. Bitte entnehmen sie ihr Getraenk!";
                        }else if (rueckgabe > preiswasser)
                        {
                            cout << "Danke. Bitte entnehmen sie ihr Getraenk!" << endl;
                            cout << "Ihr Wechselgeld betraegt: " << rueckgabe - preiswasser << " Euro";
                        }
                        break;
                    }else if (einwurf1 > preiswasser)
                    {
                        cout << "Danke. Bitte entnehmen sie ihr Getraenk!" << endl;
                        cout << "Ihr Wechselgeld betraegt: " << einwurf1 - preiswasser << " Euro" << endl;
                        break;
                    }
                case 2:
                    cout << "Sie haben 2. Limonade gewaehlt. Bitte zahlen sie " << preislimonade << " Euro" << endl << endl;
                    cout << "Einwurf: ";
                    cin >> einwurf1;
                    cout << endl;
                    if (einwurf1 == preislimonade)
                    {
                        cout << "Danke. Bitte entnehmen sie ihr Getraenk!";
                        break;
                    }else if (einwurf1 < preislimonade)
                    {
                        float rest = preislimonade - einwurf1;
                        float rueckgabe = 0;
                        do
                        {
                            float einwurf2 = 0;
                            cout << "Es fehlen: " << rest << " Euro" << endl << endl;
                            cout << "Einwurf: ";
                            cin >> einwurf2;
                            cout << endl;
                            rueckgabe += (einwurf1 + einwurf2);
                            rest = round(rest - einwurf2, 2);
                            einwurf1 = 0;
                        }while (rest > 0);
                        if (rueckgabe == preislimonade)
                        {
                            cout << "Danke. Bitte entnehmen sie ihr Getraenk!";
                        }else if (rueckgabe > preislimonade)
                        {
                            cout << "Danke. Bitte entnehmen sie ihr Getraenk!" << endl;
                            cout << "Ihr Wechselgeld betraegt: " << rueckgabe - preislimonade << " Euro";
                        }
                        break;
                    }else if (einwurf1 > preislimonade)
                    {
                        cout << "Danke. Bitte entnehmen sie ihr Getraenk!" << endl;
                        cout << "Ihr Wechselgeld betraegt: " << einwurf1 - preislimonade << " Euro" << endl;
                        break;
                    }
                case 3:
                    cout << "Sie haben 3. Bier gewaehlt. Bitte zahlen sie " << preisbier << " Euro)" << endl << endl;
                    cout << "Einwurf: ";
                    cin >> einwurf1;
                    cout << endl;
                    if (einwurf1 == preisbier)
                    {
                        cout << "Danke. Bitte entnehmen sie ihr Getraenk!";
                        break;
                    }else if (einwurf1 < preisbier)
                    {
                        float rest = preisbier - einwurf1;
                        float rueckgabe = 0;
                        do
                        {
                            float einwurf2 = 0;
                            cout << "Es fehlen: " << rest << " Euro" << endl << endl;
                            cout << "Einwurf: ";
                            cin >> einwurf2;
                            cout << endl;
                            rueckgabe += (einwurf1 + einwurf2);
                            rest = round(rest - einwurf2, 2);
                            einwurf1 = 0;
                        }while (rest > 0);
                        if (rueckgabe == preisbier)
                        {
                            cout << "Danke. Bitte entnehmen sie ihr Getraenk!";
                        }else if (rueckgabe > preisbier)
                        {
                            cout << "Danke. Bitte entnehmen sie ihr Getraenk!" << endl;
                            cout << "Ihr Wechselgeld betraegt: " << rueckgabe - preisbier << " Euro";
                        }
                        break;
                    }else if (einwurf1 > preisbier)
                    {
                        cout << "Danke. Bitte entnehmen sie ihr Getraenk!" << endl;
                        cout << "Ihr Wechselgeld betraegt: " << einwurf1 - preisbier << " Euro" << endl;
                        break;
                    }
            }
        }else { cout << "Falsche Eingabe!";}
        getchar();
        getchar();
    return 0;
    }

  5. #5
    Forum Guru Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: foat ist falsch

    Das ist keine gute Lösung. Du solltest lieber das Ausgabeformat per cout.precision steuern, anstatt manuell umzurechnen, da es ja nur um die Ausgabe geht.

  6. #6
    Youngster
    Themenstarter

    Registriert seit
    23.08.2009
    Beiträge
    10
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: float ist falsch

    Hmm irgendwie geht das nicht.
    Wenn ich immer 0.1 eingebe ist

    rest = -1.4901161e-008 und nicht rest = 0

    wie vorher auch.

    PS: Mir gefällt die Lösung ja auch nicht.
    Geändert von doctorjekyll (25.08.2009 um 01:58 Uhr)

  7. #7
    Forum Guru Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: foat ist falsch

    Du machst cout.precision(6), und dann wird dir dir nicht mehr diesen Rest anzeigen.
    Ansonsten evtl. long double nehmen.

Ähnliche Themen

  1. Was ist falsch?
    Von ludgerf321 im Forum HTML & CSS Forum
    Antworten: 4
    Letzter Beitrag: 11.01.2009, 18:29
  2. Was ist falsch
    Von JJAANN im Forum HTML & CSS Forum
    Antworten: 4
    Letzter Beitrag: 04.03.2008, 20:34
  3. was ist da falsch ?
    Von im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 1
    Letzter Beitrag: 24.09.2007, 17:59
  4. Was ist da falsch?
    Von Skydaphir im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 1
    Letzter Beitrag: 26.05.2006, 20:33
  5. was mache ich falsch?
    Von Mark1979 im Forum HTML & CSS Forum
    Antworten: 1
    Letzter Beitrag: 22.11.2005, 01:22

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •