public readonly ulong point;
public readonly decimal ord;
public readonly string suffix;
public _tableEntry(ulong point, decimal ord, string suffix)
static _tableEntry [] table = new _tableEntry[] {
new _tableEntry(1000L, 1, " B"),
new _tableEntry(1000000L, 1024m, " KB"),
new _tableEntry(1000000000L, 1048576m, " MB"),
new _tableEntry(1000000000000L, 1048576m * 1024, " GB"),
new _tableEntry(1000000000000000L, 1048576m * 1048576m, " TB"),
new _tableEntry(1000000000000000000L, 1048576m * 1048576m * 1024m, " PB")
public static void Main()
decimal ord = 1048576m * 1048576m * 1048576m;
for(int i=0;i<table.Length;++i)
suffix = table[i].suffix;
formatted = Math.Round(k, 2, System.MidpointRounding.AwayFromZero);
if (Math.Abs(k - formatted) > 0.001m)
formatted = Math.Round(k, 1, System.MidpointRounding.AwayFromZero);
if (Math.Abs(k - formatted) > 0.01m)
formatted = Math.Round(k, 0, System.MidpointRounding.AwayFromZero);
if (Math.Abs(k - formatted) > 0.1m)
Console.WriteLine(circa + formatted.ToString("0.##") + suffix);
Console.WriteLine(circa + formatted.ToString("00.#") + suffix);
Console.WriteLine(circa + formatted.ToString("000") + suffix);