2014-07-16 4 views
0

Я использую эту строку кода для преобразования строк в int16, int32, double и других типов:проблемы Convert.ChangeType с передачей двойной

var convertedValue = value == null ? null : Convert.ChangeType(value, targetType, CultureInfo.InvariantCulture); 

Может кто-нибудь объяснить мне, почему convertedValue установлен в, например, 205.0, когда value = "20,5" и targetType - это двойной?

Благодарим за помощь.

+0

Что это значит делать, '' не Десятичный разделитель в 'InvariantCulture' –

+0

да я просто понял, что тоже. При отладке я набрал свой графический интерфейс 20.5, но, получив значение где-то еще, метод ToString() изменил это значение на «20,5». Странно – user3596113

+1

Почему это странно? 'ToString()' будет уважать текущую культуру. Вы явно переопределяете это, когда выполняете 'Convert.ChangeType'. «У двойников нет какой-то культуры, которую они несут с собой. –

ответ

0

Его десятичный разделитель. Как 20000 можно записать в строку как 20 000. Similarely, когда вы конвертируете 20 000 в double, это даст вам 20000.

0

У меня была аналогичная проблема в моем проекте VB.Net. Причина этого заключалась в том, что компилятор обрабатывал значения с запятой ("20,5") как строки, потому что нет десятичной точки для десятичного значения, поэтому она конвертирует "20,5" в 205. Я решил эту проблему, заменив запятую с точкой, используя

.ToString().Replace(",", ".") 
Смежные вопросы