你如何用C#表示这个循环作为数学表达式?
private string FormatBytes(long bytes)
{
string[] Suffix = { "B", "KB", "MB", "GB", "TB" };
int i;
double dblSByte = bytes;
for (i = 0; i < Suffix.Length && bytes >= 1024; i++, bytes /= 1024)
{
dblSByte = bytes / 1024.0;
}
return String.Format("{0:0.##} {1}", dblSByte, Suffix[i]);
}
答案 0 :(得分:1)
您可以通过首先计算最接近的1024次幂来计算数值:
int power = (int) Math.Log(bytes, 1024)
然后你可以将这个数字限制为后缀的数量,这样你就不会超过数组的末尾:
int power = Math.Min(Suffix.Length-1, (int) Math.Log(bytes, 1024));
然后你根据这个力量找出你应该划分原始数字的东西:
double div = Math.Pow(1024, power);
然后,您可以使用指定功率1024的后缀格式化字符串:
return string.Format("{0:f1}{1}", bytes / div, Suffix[power]);
将所有这些放在一起(并将“PB”投入数PB):
private string FormatBytes(long bytes)
{
string[] Suffix = { "B", "KB", "MB", "GB", "TB", "PB" };
int power = Math.Min(Suffix.Length-1, (int) Math.Log(bytes, 1024));
double div = Math.Pow(1024, power);
return string.Format("{0:f1}{1}", bytes / div, Suffix[power]);
}
瞧瞧!在不使用循环的情况下以数学方式计算。
(我敢打赌,这比循环的速度快得多......)
如果你愿意,你可以扩展后缀数组以包含“exobyte”,然后它可以很好地工作到int.MaxValue
,即8.0EB。