gpt4 book ai didi

c# - 字节到人类可读的字符串

转载 作者:太空狗 更新时间:2023-10-30 00:49:54 25 4
gpt4 key购买 nike

我正在使用以下代码将字节转换为人类可读的文件大小。但它没有给出准确的结果。

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

最佳答案

关于如何显示字节总是有点困惑。如果结果是您想要实现的,那么您的代码就是正确的。

您从 Google 显示的是十进制表示法。所以就像你说 1000m = 1km 一样,你可以说 1000byte = 1kB

另一方面,有二进制表示,其中 1k = 2^10 = 1024。这些表示称为 kibiBytes, Gibibytes etc .

您选择哪种表示取决于您或您客户的要求。只需明确说明您使用的是什么以避免混淆。

关于c# - 字节到人类可读的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35062591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com