c# - bytes to human readable string -
i using following code convert bytes human readable file size. it's not giving accurate result.
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]); } } usage:
filesizehelper.gethumanreadablefilesize(63861073920); it returns 59.48 gb
if convert same bytes using google converter gives 63.8gb.
idea wrong in code?
goolge screenshot:

@rené vogt , @bashis explanation. working using following code
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]); } }
there little confusion how display bytes. code correct if result trying achieve.
what showed google decimal representation. 1000m = 1km, can 1000byte = 1kb.
on other hand, there binary representation 1k = 2^10 = 1024. these representations called kibibytes, gibibytes etc.
which representation choose or requirements of customers. make obvious use avoid confusion.
Comments
Post a Comment