Как использовать Convert.ChangeType(), когда conversionType является десятичным, а вход - "40,00",
Я имею в виду, я хочу преобразовать это:
string a = "40.00";
Convert.ChangeType(a, typeof(decimal))
результатом является десятичное значение "4000"
проблема заключается в том, что вызов конвертации находится в очень абстрактном обобщенном методе в конвертере xmlToObject. Я не хочу добавлять программно много разных исключений для правильной конвертации.
считает Криса
Ответы
Ответ 1
Десятичная точка не может быть представлена символом периода в вашей текущей культуре.
В общем случае при выполнении конверсий с инвариантами культуры лучше всего указать CultureInfo.InvariantCulture в качестве аргумента IFormatProvider
для метод:
(decimal) Convert.ChangeType(a, typeof(decimal), CultureInfo.InvariantCulture);
Ответ 2
Преобразование, скорее всего, выполняется с использованием культуры, которая использует период как разделитель тысяч, а не десятичный разделитель.
Укажите культуру при преобразовании значения:
Convert.ToDecimal(a, CultureInfo.InvariantCulture)
Ответ 3
Следующий код
string s = "40.00";
decimal d = (decimal)Convert.ChangeType(s, typeof(decimal));
делает d = 40. Это выглядит хорошо для меня. Какова ваша проблема?
Изменить:
Кажется, у вас может быть проблема с используемой культурой.
Сделайте это для преобразования:
string s = "40.00";
decimal d = (decimal)Convert.ChangeType(s, typeof(decimal), CultureInfo.InvariantCulture);