Есть ли способ использования форматирования строк для форматирования Thousands, Millions, Billions до 123K, 123M, 123B без необходимости менять код для деления значения на Thousand, Million или Billion?
String.Format("{0:????}", LargeNumber)
Есть ли способ использования форматирования строк для форматирования Thousands, Millions, Billions до 123K, 123M, 123B без необходимости менять код для деления значения на Thousand, Million или Billion?
String.Format("{0:????}", LargeNumber)
Существуют разные способы достижения этого, но для меня проще всего и быстрее использовать "," custom specifier
double value = 1234567890;
// Displays 1,234,567,890
Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture));
// Displays 1,234,568K
Console.WriteLine(value.ToString("#,##0,K", CultureInfo.InvariantCulture));
// Displays 1,235M
Console.WriteLine(value.ToString("#,##0,,M", CultureInfo.InvariantCulture));
// Displays 1B
Console.WriteLine(value.ToString("#,##0,,,B", CultureInfo.InvariantCulture));
Я использую это сочетание форматов в методе расширения (просто добавьте его в свой проект и наслаждайтесь) 😎
public static string ToKMB(this decimal num)
{
if (num > 999999999)
{
return num.ToString("0,,,.###B", CultureInfo.InvariantCulture);
}
else
if (num > 999999)
{
return num.ToString("0,,.##M", CultureInfo.InvariantCulture);
}
else
if (num > 999)
{
return num.ToString("0,.#K", CultureInfo.InvariantCulture);
}
else
{
return num.ToString(CultureInfo.InvariantCulture);
}
}
Применение:
((decimal)235).ToKMB();
// 235
((decimal)1235).ToKMB();
// 1.2K
((decimal)6271235).ToKMB();
// 6.27M
((decimal)93246571235).ToKMB();
// 93.247B
Примечания:
Он возвращает больше деталей для больших чисел, и мне это нравится.
Я пишу метод для чисел
decimal
в этом примере, вы можете написать некоторые методы переопределения для поддержкиint
,long
иdouble
, чтобы использовать его без кастингов, таких как:
myIntNumber.ToKMB();
myLongNumber.ToKMB();
myDoubleNumber.ToKMB();
myDecimalNumber.ToKMB();
Вы можете реализовать ICustomFormatter, который делит значение на тысячи, миллион или миллиард и использует его следующим образом:
var result = string.Format(new MyCustomFormatter(), "{0:MyFormat}", number);