Преобразование строк в десятичные: разделение точек вместо запятой

У меня есть строка, считанная из текстового поля. Он содержит запятую для десятичного разделения.

У меня NumberFormatInfo.CurrencyDecimalSeparator установлено значение , (запятая), но когда я преобразовываю строку в десятичную Convert.ToDecimal(mystring);, я получаю однораздельное значение для десятичного числа.

Пример:

decimal a=Convert.ToDecimal("1,2345"); ----> decimal is 1.2345

Я тоже попробовал:

double a=Convert.ToDouble("1,2345"); 

но точка для десятичного значения снова

Ответы

Ответ 1

Спасибо за весь ответ.

Поскольку мне нужно записать десятичное число в XML файле, я выяснил эту проблему. В этом обсуждении я узнал, что стандартный XML файл использует точку для десятичного значения, и это независимость от культуры. Таким образом, мое решение представляет десятичное число десятичной точки в XML файле и конвертирует прочитанную строку из того же файла xml mystring.Replace(".", ","); Спасибо Agat за предложение исследовать проблему в xml-контексте и Ε Г И І И О, потому что я не знал, что визуальная студия не уважает настройки культуры, которые у меня есть мой код.

Ответ 2

Все это о культурах. Если у вас есть какая-либо другая культура, кроме "американского английского" (а также хорошие манеры развития), вы должны использовать что-то вроде этого:

var d = Convert.ToDecimal("1.2345", new CultureInfo("en-US"));
// (or 1,2345 with your local culture, for instance)

(очевидно, вы должны заменить "en-US" культурой вашей местной культуры)

так же, если вы хотите сделать ToString()

d.ToString(new CultureInfo("en-US"));

Ответ 3

Вместо замены мы можем заставить такую ​​культуру, как

var x = decimal.Parse("18,285", new NumberFormatInfo() { NumberDecimalSeparator = "," });

он даст результат 18.285

Ответ 4

Вы просматриваете десятичные или двойные значения в Visual Studio. Это не соответствует настройкам культуры, которые у вас есть на вашем коде.

Измените настройки региона и языка на панели управления, если вы хотите видеть значения decimal и double, имеющие запятую в качестве разделителя с разделителями.

Ответ 5

Спасибо за ответ

Я контролировал эти параметры:

  • В моей панели управления Windows у меня есть правильные настройки: итальянский язык (запятая для десятичного значения)
  • На рабочем столе Visual Studio Express 2012 у меня есть Параметры → Среда → Параметры международных параметров на "Как Microsoft Windows"

Если у меня есть этот оператор в коде decimal a=3.3m;, то он ОК, но decimal a=3,3m; Ошибка компиляции

Спасибо Лука

Ответ 6

Я решил использовать это решение.

decimal weeklyWage;
decimal.TryParse(items[2],NumberStyles.Any, new NumberFormatInfo() { NumberDecimalSeparator = "."}, out weeklyWage);

Ответ 7

Я сталкивался с подобной проблемой при использовании Convert.ToSingle(my_value). Если языковые настройки операционной системы - английский, 2.5 (пример) будет принят как 2.5. Если языком операционной системы является немецкий, 2.5 будет рассматриваться как 2,5, то есть 25, который я использовал. Инвариантная культура ИФОРмат предоставлена и работает. Это всегда относится к "." как '.' вместо ',' независимо от языка системы.

float var = Convert.ToSingle(my_value, System.Globalization.CultureInfo.InvariantCulture);