Короткий формат больших чисел с Humanizer
Я использую humanizr.net в проекте.NET для форматирования дат, и это работает очень хорошо.
Теперь я хочу отформатировать большие числа в кратко читаемые, например: 1234 -> 1,2K 50,323 -> 50,3K.
Есть ли способ сделать это с помощью Humanizer?
1 ответ
Попробуйте что-то вроде этого:
public static string FormatLargerNumbers(double number)
{
string[] prefix = { string.Empty, "K", "M" };
var absnum = Math.Abs(number);
int add;
if (absnum < 1)
{
add = (int)Math.Floor(Math.Floor(Math.Log10(absnum)) / 3);
}
else
{
add = (int)(Math.Floor(Math.Log10(absnum)) / 3);
}
var shortNumber = number / Math.Pow(10, add * 3);
return string.Format("{0}{1}",shortNumber.ToString("0.#"), prefix[add]);
}
string formatted = FormatLargerNumbers(50323);
// Output : 50,3K
Это действительно отличное решение, повезло.
Мне это тоже было нужно, и я только что немного изменил ваше решение, чтобы я мог также отображать "миллиарды", поскольку без него я получал исключение вне диапазона. Размещение здесь на случай, если кому-то понадобятся миллиарды.
public static string FormatLargerNumbers(double number)
{
string[] prefix = { string.Empty, "K", "M", "B" };
var absnum = Math.Abs(number);
double add;
if (absnum < 1)
{
add = (int)Math.Floor(Math.Floor(Math.Log10(absnum)) / 3);
}
else
{
add = (int)(Math.Floor(Math.Log10(absnum)) / 3);
}
var shortNumber = number / Math.Pow(10, add * 3);
return string.Format("{0}{1}", shortNumber.ToString("0.#"),
(prefix[Convert.ToInt32(add)]));
}