将字节转换为易于阅读的字符串

5
我正在使用以下代码将字节转换为易读的文件大小。但是,它没有给出准确的结果。
public static class FileSizeHelper
{
    static readonly string[] SizeSuffixes = { "bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" };
    public static string GetHumanReadableFileSize(Int64 value)
    {
        if (value < 0) { return "-" + GetHumanReadableFileSize(-value); }
        if (value == 0) { return "0.0 bytes"; }

        int mag = (int)Math.Log(value, 1024);
        decimal adjustedSize = (decimal)value / (1L << (mag * 10));

        return string.Format("{0:n2} {1}", adjustedSize, SizeSuffixes[mag]);
    }
}

使用方法:

FileSizeHelper.GetHumanReadableFileSize(63861073920);

它返回 59.48 GB
但如果我使用谷歌转换器将相同的字节转换,它会给出63.8GB
有什么想法是代码有什么问题吗?

谷歌截图:

Google screenshot

@René Vogt 和 @bashis 感谢解释。最终使用以下代码使其工作:

public static class FileSizeHelper
{
    static readonly string[] SizeSuffixes = { "bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" };
     const long byteConversion = 1000;
    public static string GetHumanReadableFileSize(long value)
    {

        if (value < 0) { return "-" + GetHumanReadableFileSize(-value); }
        if (value == 0) { return "0.0 bytes"; }

        int mag = (int)Math.Log(value, byteConversion);
        double adjustedSize = (value / Math.Pow(1000, mag));


        return string.Format("{0:n2} {1}", adjustedSize, SizeSuffixes[mag]);
    }
}

2
63861073920 bytes to gib - user4003407
1
请注意,您的结果与谷歌的Gibibyte选项匹配 - 这是该领域的一个问题,不同意见认为Giga / mega是1000还是1024等。 - James Thorpe
4
你正在除以“1024”,而Google明显是除以“1000”。 - daniel59
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Enigmativity
亲爱的大家,非常感谢您的解释。实际上客户需要那种格式,所以我更新了代码以获得类似谷歌的结果。:) - user964829
2个回答

5
关于如何显示字节,经常会有一些混乱。如果你的代码得到了你想要的结果,那么你的代码是正确的。
而谷歌上展示的是十进制表示法。所以就像你说的 1000m = 1km,你也可以说 1000byte = 1kB
另一方面,还有二进制表示法,其中 1k = 2^10 = 1024。这些表示法被称为 kibiBytes, Gibibytes 等
选择哪种表示法取决于你或客户的需求。只需明确使用哪种表示法以避免混淆即可。

2
如果您期望收到吉比字节,那么您的结果是正确的。然而,Google 返回给您千兆字节
两者之间的区别在于,如果提供了 x 字节,您将获得 x / (1000 * 1000 * 1000) 千兆字节和 x / (1024 * 1024 * 1024) 吉比字节。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接