Переформатирование больших чисел в строку C # - PullRequest
0 голосов
/ 07 ноября 2018

Если мне нужно обновлять хранимое значение каждую секунду (или чаще) и преобразовывать это значение в строку, которая будет отображаться, а также пытаться сделать его более читабельным, каков будет наиболее удобный / эффективный способ справиться с этим? Помимо использования научной записи.

Сейчас я использую число с плавающей точкой для хранения значения, которое я хочу показать, затем делю это число на фиксированную сумму (тысяча, миллион, миллиард ...) и присваиваю ему определенный суффикс (K, M , Б ..); однако я почти уверен, что это не элегантный способ сделать это .. Любые советы?

Сценарий очень похож на этот:

float x = 123456;
float y;

if (x >= 1000 && x < 1000000)
{ 
    y = (x / 1000);
    Console.WriteLine(y.ToString("0.000") + "K"); 
}

if (x >= 1000000 && x < 1000000000)
{
   y = (x / 1000000);
   Console.WriteLine(y.ToString("0.000") + "M"); 
}     

if (x >= 1000000000 && x < 1000000000000)
{ 
    y = (x / 1000000000);
    Console.WriteLine(y.ToString("0.000") + "B"); 
} 

Что возвращает 123,456K

1 Ответ

0 голосов
/ 07 ноября 2018

Вот мое предложение:

string[] suffixes = new string[]{ "", "K", "M", "B", "Q", "x10¹⁵", "x10¹⁸", "x10²¹", "x10²⁴" } ; // Replace with the suffixes you want
float number = 13248497894961536217986532f;
int suffixIndex = 0 ;
for( ; suffixIndex < suffixes.Length - 1 && number >= 1000 ; suffixIndex++ )
    number /= 1000;
Console.WriteLine( number.ToString("0.###") + suffixes[suffixIndex] ) ;

Обратите внимание: если вы не предоставите достаточно суффиксов, вы можете получить нежелательный результат:

Например, 340282300000000x10²⁴, если вы предоставите float.MaxValue

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...