将字节转换为0.00格式的mb

时间:2018-03-28 17:56:33

标签: c#

我创建了一个标题数据检索器,用户在其中输入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;
}

2 个答案:

答案 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;