Nur zwei Nachkommastellen bei einer float Zahl



  • Hallo zusammen,
    vieleicht kann mir jemand von euch helfen.
    Ich habe folgendes Problem:
    Ich habe eine Variable die in float deklariert ist.
    Nun enthält diese Variable eine Zahl mit vielen Kommastellen. ich brauche aber nur zwei Kommastellen.
    Ich habe gesehen es gibt eine Möglichkeit die Kommastellen zubeschränken.

    sprintf(buf,"%0.2f",Value);

    Leider muss die Variable in der die Neue Zahl steht (buf) in char deklariert werden.
    Ich brauche aber float als Variablentyp.

    Kann mir jemand weiterhelfen?



  • Mach es doch folgendermaßen:

    float DeineZahl = 19.22423534635;
    int NochEineZahl = DeineZahl * 100; // = 1922;
    DeineZahl = NochEineZahl/100; / = 19.22
    

    Das ganze kannst du auch in eine Zeile schreiben:

    DeineZahl = (float)((int)(DeineZahl*100))/100;
    

  • Mod

    Das Verfahren nennt sich runden... 😉
    Siehe Diskussion hir:
    http://www.c-plusplus.net/forum/170404?highlight=runden



  • Leider funktioniert das nicht.

    Er schreibt:

    float DeineZahl = 19.22423534635;
    int NochEineZahl = DeineZahl * 100; // = 1922;
    DeineZahl = NochEineZahl/100; / = 19.00 Anstatt 19.22

    Liegt es vielleicht an int?



  • Hallo.

    Ändere Deine letzte Zeile zu

    DeineZahl = NochEineZahl/100.0;
    

    Gruß

    Oli_1977



  • Oli_1977 schrieb:

    Hallo.

    Ändere Deine letzte Zeile zu

    DeineZahl = NochEineZahl/100.0;
    

    Gruß

    Oli_1977

    Stimmt, das hatte ich nicht bedacht...

    Alternativ sollte es eigentlich auch so gehen:
    DeineZahl = (float)(NochEineZahl/100);



  • Danke für euere Hilfe es funktioniert.



  • GR-Thunderstorm schrieb:

    Alternativ sollte es eigentlich auch so gehen:
    DeineZahl = (float)(NochEineZahl/100);

    Nein, das dürfte das gleiche Ergebnis bringen. Du meinst vermutlich eher sowas:

    DeineZahl = (float)NochEineZahl/100;
    

    Einer der Operanden muss Fließkomma sein, dann ist das Ergebnis auch Fließkomma. Da du aber sowieso ein Literal in dem Ausdruck hast, kannst du das auch gleich als float oder double notieren und sparst dir den Cast.



  • double f = 1234.123456789012345;
    cout.setf(ios::scientific, ios:: floatfield);
    cout.precision(4);
    cout<< f << endl; //1.2341e+03
    cout.setf(ios::fixed, ios::floatfield);
    cout.precision(4);
    cout<< f << endl;  //1234.1234
    

    EDIT:

    sorry, da wird nicht gerundet. Aber wenn man das cout.setf(ios:: ...........) weg lässt und nur bei cout.precision in der Klammer die Zahl angibt, wird auto. gerundet.



  • Versuch mal bei deiner Ausgabe die 0 vor dem Komma wegzulassen also

    printf("%.2f",deinezahl);

    damit sollte das klappen.


Anmelden zum Antworten