我创建了一个标题数据检索器,用户在其中输入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;
}
答案 0 :(得分:0)
问题是你完全在整数类型中工作,不能为十进制存储提供任何空间。您需要转换为double或decimal。如果你使用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;
}
如果你不能使用元组,我会定义一个小类来传达相同的信息,或者甚至是一个给定小尺寸的结构。
答案 1 :(得分:0)
以上大多数答案对于初学者来说太难理解了,所以经过几次尝试和尝试我找到了自己的方式。这是答案。
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;