我创建了一个标题数据检索器,用户输入URL并以MB
返回大小我的代码正常工作,但没有显示浮动值
if (long.TryParse(resp.Headers.Get("Content-Length"), out ContentLength))
{
string File_Size;
if (ContentLength >= 1073741824)
{
result = ContentLength / 1073741824;
kbmbgb.Text = "GB";
}
else if (ContentLength >= 1048576)
{
result = ContentLength / 1048576;
kbmbgb.Text = "MB";
}
else if (ContentLength >= 1024)
{
result = ContentLength / 1024;
kbmbgb.Text = "KB";
}
else
{
result = ContentLength;
kbmbgb.Text = "BYTE";
}
File_Size = result.ToString("0.00");
sizevaluelabel.Text = File_Size;
}
问题是您完全在不可提供十进制存储空间的整体类型中工作。您需要转换为双重或十进制。如果您使用的是C#7(支持元组(,则可以这样做:
public (double, string) AdjustFileSize(long fileSizeInBytes)
{
var names = {"BYTES", "KB", "MB", "GB"};
double sizeResult = fileSizeInBytes * 1.0;
int nameIndex = 0;
while (sizeResult > 1024 && nameIndex < names.Length)
{
sizeResult /= 1024;
nameIndex++;
}
return (sizeResult, names[nameIndex]);
}
这是另一种有趣的方法:
public (double, string) AdjustFileSize(long fileSizeInBytes)
{
if (fileSizeInBytes <= 0) return (0.0, "BYTES");
var names = {"BYTES", "KB", "MB", "GB"};
var sizes = {1.0, 1024.0, 1048576.0, 1073741824.0};
var index = Math.Log(fileSizeInBytes, 1024);
return (fileSizeInBytes / sizes[index], names[index]);
}
然后调用任何一个版本:
long ContentLength = 0;
if (long.TryParse(resp.Headers.Get("Content-Length"), out ContentLength))
{
var size = AdjustFileSize(ContentLength);
sizevaluelabel.Text = size.Item1.ToString("0.00");
kbmbgb.Text = size.Item2;
}
如果您不能使用元组,我将定义一个小课以传达相同的信息,甚至可以给定尺寸的结构。
上述大多数答案对初学者来说太难理解了,因此经过几次尝试,尝试了自己的方式。这是答案。
double ContentLength = 0;
double result;
if (double.TryParse(resp.Headers.Get("Content-Length"), out ContentLength))
{
string File_Size;
if (ContentLength >= 1073741824.00)
{
result = ContentLength / 1073741824.00;
kbmbgb.Text = "GB";
}
else if (ContentLength >= 1048576.00)
{
result = ContentLength / 1048576.00;
kbmbgb.Text = "MB";
}
else if (ContentLength >= 1024.00)
{
result = ContentLength / 1024.00;
kbmbgb.Text = "KB";
}
else
{
result = ContentLength;
kbmbgb.Text = "BYTE";
}
File_Size = result.ToString("0.00");
sizevaluelabel.Text = File_Size;