Форматирование больших количеств с.NET

Для той определенной ситуации я создал бы один объект конфигурации и раздал бы его тем, кому нужен он.

, Так как это - конфигурация, это должно использоваться только в определенных частях приложения и не обязательно должно быть Вездесущим.

Однако, если Вы не имели проблем с помощью них и не хотите тестировать его, что трудно, необходимо продолжать идти, как Вы сделали до сих пор.

Read дискуссия о том, почему их считают вредными. Я думаю, что большинство проблем возникает, когда много ресурсов сохранено одиночным элементом.

Для конфигурации приложения я думаю, что было бы безопасно сохранить его как он.

8
задан Harsh Baid 18 April 2013 в 13:06
поделиться

4 ответа

Вы можете использовать Log10 , чтобы определить правильный разрыв. Что-то вроде этого может сработать:

double number = 4316000;

int mag = (int)(Math.Floor(Math.Log10(number))/3); // Truncates to 6, divides to 2
double divisor = Math.Pow(10, mag*3);

double shortNumber = number / divisor;

string suffix;
switch(mag)
{
    case 0:
        suffix = string.Empty;
        break;
    case 1:
        suffix = "k";
        break;
    case 2:
        suffix = "m";
        break;
    case 3:
        suffix = "b";
        break;
}
string result = shortNumber.ToString("N1") + suffix; // 4.3m
18
ответ дан 5 December 2019 в 06:54
поделиться
long valueToFormat = 4316000;
var dict = new Dictionary<long, string>() {
    {1000000000, "b"},
    {1000000, "m"},
    {1000, "k"}
 };

 string formattedValue = valueToFormat.ToString();
 foreach (long n in dict.Keys.OrderBy(k => k)) {
     if (valueToFormat < n) {
         continue;
     }
     double value = Math.Round(valueToFormat / (double)n, 1);
     formattedValue = String.Format("{0}{1}", value, dict[n]);
 }
 Console.WriteLine(formattedValue);
1
ответ дан 5 December 2019 в 06:54
поделиться

разделите число на 1000000,0, затем добавьте "m".

не забудьте округлить число до 1 десятичного знака.

2
ответ дан 5 December 2019 в 06:54
поделиться

Если вы работаете только в Windows, вы можете использовать объявление p-invoke в C # или VB.NET для вызова функций Win32 StrFormatByteSizeW или StrFormatByteSize64 . Если ваше приложение / сайт гарантированно работает как минимум на Vista SP1 или Server 2008, есть также StrFormatByteSizeEx с несколькими дополнительными параметрами.

Пример из документации MSDN:

Numeric value   Text string 
532             532 bytes 
1340            1.30KB 
23506           22.9KB 
2400016         2.29MB 
2400000000      2.23GB 

Эти API также поддерживают локализацию правильно для пользователей, не владеющих английским языком.

1
ответ дан 5 December 2019 в 06:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: