Преобразование строк в десятичные: разделение точек вместо запятой
У меня есть строка, считанная из текстового поля. Он содержит запятую для десятичного разделения.
У меня 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);