C#string.format与十进制格式。

C#string.format与十进制格式。,c#,decimal,string.format,C#,Decimal,String.format,所有的结果都是,00,但我需要显示真实的尺寸。那么哪种格式合适呢?格式字符串与此无关。整数操作将丢弃任何余数 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 使用m后缀指定小数,如下所示: 3920139012 / 1024 / 10

所有的结果都是,00,但我需要显示真实的尺寸。那么哪种格式合适呢?

格式字符串与此无关。整数操作将丢弃任何余数

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
使用
m
后缀指定小数,如下所示:

3920139012 / 1024 / 1024  / 1024 // 3
或者:

3920139012 / 1024m / 1024m / 1024m // 3.6509139575064182281494140625
这可能更清楚一些:

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

格式字符串与此无关。整数操作将丢弃任何余数

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
使用
m
后缀指定小数,如下所示:

3920139012 / 1024 / 1024  / 1024 // 3
或者:

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);
    }
}

因为你做的是整数除法,它会截断十进制余数。请改用浮点除法:

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);
    }
}