int kurzzeitig zu float machen



  • Hi Leute,

    wie ging das nochmal mit dem einen Integer nur für eine Ausgabe oder Berechnung oder so zum Float machen???
    Möchte nämlich GB mit Komma! Irgendwas mit Klammern war das doch. Kann mir das nochmal jemand erklären?

    cout << TotalNumberOfFreeBytes.QuadPart/1024/1024<<" MB   ";  
      cout << TotalNumberOfFreeBytes.QuadPart/1024/1024/1024<<" GB";
    

    mfg, thx



  • Hallo,

    dope_dope schrieb:

    Irgendwas mit Klammern war das doch.

    ich würde sagen, das ist etwas mit einem ".", oder einem "L" (z.B.):

    cout << TotalNumberOfFreeBytes.QuadPart/1024.0/1024.0/1024.0<<" GB";
    

    oder

    cout << TotalNumberOfFreeBytes.QuadPart/1024L/1024L/1024L<<" GB";
    

    MfG



  • Oder mit f für float 😃

    Erklärung:
    Der Teiler bestimmt welchen Datentyp das Ergebnis annimmt (einfach ausgedrückt). Wenn also der Teiler eine Ganzzahl ist, dann ist auch das Ergebnis eine Ganzzahl und das heißt wiederum, dass alle Zahlen nach dem eigentlichen Komma einfach abgeschnitten werden (manchmal wird auch gerundet bei anderen Programmiersprachen 🙄 ).



  • Ich hatte eigentlich nach

    cout << (float)TotalNumberOfFreeBytes.QuadPart/1024.0/1024.0/1024.0<<" GB";
    

    gesucht, aber trotzdem thx!
    Wenn ich das allerdings so mache wie ihr, dann teile ich meinen integer durch einen float-wert (falls ich das richtig verstanden habe). Der Speicherplatz (und somit die Ausgabe) bleibt dann doch aber trotzdem float!?



  • du brauchst keinen cast (float) mehr, der ist unnötig, weil durch die Kennzeichnung der einzelnen Operanden schon ein double-Typ entsteht (ein double, kein float, es wird durch double's geteilt). Was du also damit machst, ist, den double wieder in einen float, nur für diese Ausgabe, umzuwandeln, wozu? Wenn du floats haben willst, dann genügt es, dies anders zu kennzeichnen (siehe AJ's Zusatz):

    cout << TotalNumberOfFreeBytes.QuadPart/1024f/1024f/1024f<<" GB";
    

    MfG



  • Also die Ausgabe mit Nachkommastellen krieg ich jetzt folgendermaßen hin:

    char *text1=" \n\nFreier Speicher auf Laufwerk ";
    	char string_test[600];
    
    	sprintf(string_test,
    	"%s %s %f", // das f machts
    	text1, NameLaufw, TotalNumberOfFreeBytes.QuadPart/1024.0/1024.0/1024.0); 
    
    	cout << string_test;
    
    	getch();
    

    Allerdings gibt er dann ja Float-Genauigkeit, also 6 Nachkommastellen aus. Ich hätte aber gerne nur zwei und nach Möglichkeit gerundet 😉
    Gibts dafür irgedne Anweisung oder sowas wie das f, oder muss ich dann extra ne Funktion bemühen???
    thx, mfg



  • %.2f



  • MSDN -> sprintf() -> Format -> Precision (ganz oben irgendwo)

    Dort werden auch noch alle weiteren Fragen beantwortet 😉

    MfG SideWinder



  • AJ schrieb:

    %.2f

    Hier wird aber leider nicht gerundet! Also ich hab auf C: laut Windows 6,43 GB frei und mein Programm gibt 6,44 aus.



  • Probiers mal mit einer selbstdefinierten Zahl, z. B. einmal mit 2,6 und ein anderes mal mit 2,4. Da sollte es richtig gerundet werden.

    Bei MB oder GB Angaben sind manchmal Unterschiede in unterschiedlichen Programmen. Das hängt davon ab, wie die Angaben aus den Bytes berechnet werden.


Anmelden zum Antworten