2014-01-21 38 views
1
DriveInfo[] drives = DriveInfo.GetDrives(); 
for (int i = 0; i < drives.Length; i++) 
{ 
    if (drives[i].IsReady) 
    { 
     Console.WriteLine("Drive {0} - Has free space of {1} GB",drives[i].ToString(),(drives[i].TotalFreeSpace/1024/1024/1024).ToString("N2")); 
    } 
} 

输出:带十进制格式的C#string.format。

Drive C:\ - Has free space of 70,00 GB 
Drive D:\ - Has free space of 31,00 GB 
Drive E:\ - Has free space of 7,00 GB 
Drive F:\ - Has free space of 137,00 GB 

全部结束了,00但是我需要显示实际尺寸。那么哪种格式适合?

回答

4

格式字符串与它没有任何关系。您的整数运算将丢弃任何余数。

3920139012/1024/1024/1024 // 3 

指定小数使用m后缀,像这样:

3920139012/1024m/1024m/1024m // 3.6509139575064182281494140625 

或者:

3920139012/Math.Pow(1024, 3) // 3.65091395750642 

这可能是一个更加清楚一点:

var gb = Math.Pow(1024, 3); 
foreach(var drive in DriveInfo.GetDrives()) 
{ 
    if(drive.IsReady) 
    { 
     Console.WriteLine("Drive {0} - Has free space of {1:n2} GB", 
      drive.Name, 
      drive.TotalFreeSpace/gb); 
    } 
} 
4

Becasue您AR e做整数除法它截断了十进制余数。使用浮点除法来代替:

drives[i].TotalFreeSpace/1024.0/1024.0/1024.0 

drives[i].TotalFreeSpace/(1024.0 * 1024.0 * 1024.0)