Подтвердить что ты не робот

Как использовать Convert.ChangeType(), когда conversionType является десятичным, а вход - "40,00",

Я имею в виду, я хочу преобразовать это:

string a = "40.00";
Convert.ChangeType(a, typeof(decimal))

результатом является десятичное значение "4000"

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

считает Криса

4b9b3361

Ответ 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);