mein float ist keine Fliesskommazahl



  • Hi @ all

    Ich hab in meinem Buch gelesen, dass float ein Fliesskommazahl ist, dh. es müsste einen Wert mit Kommas akzeptieren?
    Wenn ich in meinem Prog einen float 7.6 Eingebe wird die Variable mit "Nichts" gefüllt, erst wenn ich sie als double definiere.

    Wo hab ich da etwas Falsch verstanden?

    Danke Gruss pablovic



  • Zeig doch mal etwas Quelltext - aus deinen Erklärungen wird man nicht wirklich schlau.



  • Es geht um die Variable mwsts diese soll mit z.b 7.6 gefüllt werden.
    mit double ok
    mit float nok

    #include <iostream.h>
    #include <stdlib.h>
    
    int main()
    {
    float NBetrag;
    double mwsts;
    float mwst;
    
     cout << "Bitte Netto Betrag eingeben\n";
        cout << "Netto Betrag:";
        cin >> NBetrag;
        cout << "\n";
        cout << "Bitte MwSt. Satz eingeben:\n";
        cin >> mwsts;
        cout << mwsts;
        cout << "\n";
    
        NBetrag = ((NBetrag/100)*mwsts);
        cout << NBetrag;
    
          system("PAUSE");
          return 0;
    }
    


  • Also bei dem Programm fällt mir nur ein Fehler auf - es heißt include <iostream> . Ansonsten solltest du mal erklären, was hier welche falschen Werte produziert.



  • hab deine Nachricht zu spät gesehn, erklärt das das Problem?



  • Nicht wirklich. Und ehrlich gesagt kann ich mir auch nicht erklären, daß cin Probleme mit float-Eingaben haben sollte.



  • Das heisst, es müsste mit float funktionieren?



  • das problem könnte diese zeile sein:
    NBetrag = ((NBetrag/100)*mwsts)

    ich bin gerade mit der reihenfolge nicht ganz sicher, aber hier könntest du mit die division durch eine ganze zahl eine implizite umwandlung von NBetrag von float nach int durchführst.
    probier mal folgendes:
    NBetrag = ((NBetrag/100.0)*mwsts)

    edit: wobei das nicht erklärt, warum das mit double funktioniert...



  • ghorst schrieb:

    ich bin gerade mit der reihenfolge nicht ganz sicher, aber hier könntest du mit die division durch eine ganze zahl eine implizite umwandlung von NBetrag von float nach int durchführst.

    bestimmt nicht - wenn Gleitkomma-Zahlen beteiligt sind, wird auch in Gleitkomma-Arithmetik gerechnet.

    PS: Ich könnte mir noch vorstellen, daß du deine Variablennamen durcheinandergebracht hast ('mwst' eingelesen und dann mit 'mwsts' weitergerechnet).



  • dafür das das immer und automatisch gemacht wird, hatte ich schon sehr viel spaß damit...



  • ghorst schrieb:

    dafür das das immer und automatisch gemacht wird, hatte ich schon sehr viel spaß damit...

    Wenn du weißt, wann und wo die Typumwandlung stattfindet, ist das alles kein Problem 😉 Problematisch wird es nur, wenn du diesen Mechanismus überschätzt - der wird nämlich nicht auf die gesamte Formel angewendet, sondern auf jeden Teilausdruck gesondert:

    float x = 2 / 5h + 3.5;
    

    hier passiert folgendes:

    • '5h' wird umgewandelt in einen int
    • Ganzzahldivision 2/5
    • das Ergebnis (0) wird nach double umgewandelt
    • Gleitkomma-Addition 0.0+3.5
    • das Ergebnis (3.5) wird zurückgewandelt nach float (und x mit 3.5f initialisiert)

    (der letzte Schritt könnte eine Compilerwarnung über den Genauigkeitsverlust der Umwandlung einbringen)



  • Hallo

    Ich habs gefunden, dank an ghorst, es war eine verdrehung, warum es mit double "funktioniert" weiss ich nicht.

    Egal danke für die Hilfe


Anmelden zum Antworten