Prozentsatz berechnen - Ergebnis immer 0



  • Warum erhält die Variable Prozent immer 0 als Ergebnis?

    for (int x = 0; x < systemlaufwerke; x++)
    		{		
    		// <-- HDD Infos auslesen
    		System::IO::DriveInfo ^info = gcnew System::IO::DriveInfo (HD_A_drives[x]);		
    		System::Int64 freierspeicher    = info->TotalFreeSpace;
    		System::Int64 gesammterspeicher = info->TotalSize;
    
    		System::Int64 prozent = (freierspeicher / gesammterspeicher) * 100;
    


  • Zuerst wird freierSpeicher / gesamterSpeicher berechnet. Das ist 0,irgendwas. Da es sich um eine Ganzzahldivision handelt, wird der Nachkommateil weggeworfen. Also freierSpeich / gesamterSpeicher = 0. Multipliziert mit 100 macht immer noch 0.

    Lösung 1: Zuerst freierSpeicher mit 100 multiplizieren und dann erst durch gesamterSpeicher teilen. Problem: Speicherüberlauf! Also

    Lösung 2: Eine der beiden Zahlen der Division in eine Gleitkommazahl umwandeln, sodass das Ergebnis eine Gleitkommazahl wird:

    prozent = static_cast<Int64>(static_cast<double>(freierSpeicher) / gesamterSpeicher * 100 + 0.5);
    


  • Danke dir. Hab schon überlegt ob ich die Sonderschule nochmal besuche 🙂


Log in to reply