2011-03-12 90 views
1

这段代码有什么问题?我可以得到正确的价值? DrvUsg总是变为零。请帮我拿这个代码工作。帮我得到这段代码工作

Computer cmp = new Computer(); 
    string SysDrv = System.Environment.SystemDirectory.Substring(0, 2); 
    UInt64 TotalDrv = Convert.ToUInt64(cmp.FileSystem.GetDriveInfo(SysDrv).TotalSize/1024/1024); 
    UInt64 FreeDrv = Convert.ToUInt64(cmp.FileSystem.GetDriveInfo(SysDrv).AvailableFreeSpace/1024/1024); 
    UInt64 UsedDrv = (TotalDrv - FreeDrv); 
    UInt64 DrvUsg = Convert.ToUInt64((UsedDrv/TotalDrv) * 100); 
    TrkDrvUsg.Value = (int)DrvUsg; 
    LblDrvUsg.Text = (String.Format("System drive usage: {0}%", DrvUsg)); 
+1

这是一个非常恶臭的整数除法恶臭。 – BoltClock 2011-03-12 05:02:40

回答

5

这就是问题所在:

UInt64 DrvUsg = Convert.ToUInt64((UsedDrv/TotalDrv) * 100); 

这将工作:

UInt64 DrvUsg = Convert.ToUInt64(100 * UsedDrv/TotalDrv); 

你正在做一个整数除法,这将始终四舍五入,因为TotalDrvUsedDrv结果大总是零。

+0

哇超级它的工作感谢BrokenGlass :) – Gayan 2011-03-12 05:06:55

+0

+1惊人的观察! – 2011-03-12 07:40:57