Как конвертировать между строковыми представлениями в стиле “#,##0” и “{0: n2}”?

StackOverflow https://stackoverflow.com/questions/569242

Вопрос

.NET поддерживает два типа форматирования строк.

Я нахожусь в ситуации, когда существующие конфигурационные данные имеют #,##0 форматирование стиля.Новая функция требует форматирования для того же вывода, но API, необходимый для этой функции, принимает форматирование только типа {0:n2}.

Кто-нибудь знает о способе преобразования между этими двумя представлениями для числовых типов? DateTime может быть проигнорирован.

Редактировать Я научился этому:

Это было полезно?

Решение

Нет, ты не можешь.

От вашего ссылка на статьи MSDN о стандартном формате струны, вы найдете:

Фактический шаблон отрицательных чисел, размер группы чисел, разделитель тысяч, и десятичный разделитель задаются текущим объектом NumberFormatInfo.

Таким образом, стандартные спецификаторы форматирования будут варьироваться в зависимости от того, в какой среде работает программа.

Поскольку ваше пользовательское форматирование точно определяет, как будет выглядеть число, независимо от культуры, в которой работает программа.Это всегда будет выглядеть одинаково.

Язык, в котором выполняется программа, неизвестен во время компиляции, это свойство среды выполнения.

Итак, ответ таков:Нет, вы не можете сопоставить автоматически, потому что не существует однозначного согласованного сопоставления.

Другие советы

ПРЕДУПРЕЖДЕНИЕ О ВЗЛОМЕ!!!

Как Арджан указал в своем превосходном ответе то, что я хочу сделать, невозможно пуленепробиваемым способом во всех регионах (спасибо Арджану).

Для моих целей я знаю, что имею дело только с числами, и главное, что меня беспокоит, - это одинаковое количество знаков после запятой.Итак, вот мой взлом.

private static string ConvertCustomToStandardFormat(string customFormatString)
{
    if (customFormatString == null || customFormatString.Trim().Length == 0)
        return null;

    // Percentages do not need decimal places
    if (customFormatString.EndsWith("%"))
        return "{0:P0}";

    int decimalPlaces = 0;

    int dpIndex = customFormatString.LastIndexOf('.');
    if (dpIndex != -1)
    {
        for (int i = dpIndex; i < customFormatString.Length; i++)
        {
            if (customFormatString[i] == '#' || customFormatString[i] == '0')
                decimalPlaces++;
        }
    }

    // Use system formatting for numbers, but stipulate the number of decimal places
    return "{0:n" + decimalPlaces + "}";
}

Это используется для форматирования числа в 2 знака после запятой

string s = string.Format("{0:N2}%", x);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top