Попробуйте это:
var ordinals = new [] {"","K","M","G","T","P","E"};
long bandwidth = GetTheBandwidthInBitsPerSec();
decimal rate = (decimal)bandwidth;
var ordinal = 0;
while(rate > 1024)
{
rate /= 1024;
ordinal++;
}
output.Write(String.Format("Bandwidth: {0} {1}b/s",
Math.Round(rate, 2, MidpointRounding.AwayFromZero),
ordinals[ordinal]));
Доступные здесь порядковые номера (префиксы): Кило, Мега, Гига, Тера, Пета, Экс. Если вы действительно думаете, что ваша программа будет достаточно длинной, чтобы увидеть пропускную способность сети Zettabit и Yottabit, непременно бросьте инициалы Z и Y в массив.
Чтобы преобразовать одну отформатированную строку в другую, разделить ее пробелами, посмотрите на термин, который будет числом, а затем найдите в одном из префиксов непосредственно следующий за ним термин. Найдите порядковый номер в массиве, добавьте 1 и умножьте на 1024 столько раз, сколько нужно получить в битах в секунду:
var bwString= GetBandwidthAsFormattedString(); //returns "Bandwidth: 1056 Kb/s";
var parts = String.Split(bwString, " ");
var number = decimal.Parse(parts[1]);
var ordinalChar = parts[2].First().ToString();
ordinalChar = ordinalChar = "b" ? "" : ordinalChar;
var ordinal = ordinals.IndexOf(ordinalChar)
... //previous code, substituting the definition of ordinal