using HyperBooru.ApiModels; namespace HyperBooru.Client.Util; public static class Extensions { public static readonly string[] MagnitudeOrders = new[] { "K", "M", "G", "T", "P", "E", "Z", "Y", "R", "Q" }; public static string ToBytesSI(this long x) { var exp = (int) Math.Log10(x); var suffix = MagnitudeOrders.ElementAtOrDefault(exp / 3 - 1); if(suffix is null) return x.ToString(); double n = x / Math.Pow(10, exp / 3 * 3); return $"{Math.Round(n, 2 - (exp % 3))} {suffix}B"; } }