Для той определенной ситуации я создал бы один объект конфигурации и раздал бы его тем, кому нужен он.
, Так как это - конфигурация, это должно использоваться только в определенных частях приложения и не обязательно должно быть Вездесущим.
Однако, если Вы не имели проблем с помощью них и не хотите тестировать его, что трудно, необходимо продолжать идти, как Вы сделали до сих пор.
Read дискуссия о том, почему их считают вредными. Я думаю, что большинство проблем возникает, когда много ресурсов сохранено одиночным элементом.
Для конфигурации приложения я думаю, что было бы безопасно сохранить его как он.
Вы можете использовать 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
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);
разделите число на 1000000,0, затем добавьте "m".
не забудьте округлить число до 1 десятичного знака.
Если вы работаете только в 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 также поддерживают локализацию правильно для пользователей, не владеющих английским языком.