Проблема: Предположим, вы используете точку "." как десятичный разделитель в вашей региональной настройке и закодировал строку с запятой.Сделать TryParse совместимым с запятой или точкой десятичного разделителя
string str = "2,5";
Что происходит, когда вы decimal.TryParse(str, out somevariable);
это?
somevariable
будет считать 0.
Что вы можете сделать, чтобы решить эту проблему?
1- Вы можете
decimal.TryParse(str, NumberStyles.Any, CultureInfo.InvariantCulture, out somevariable);
И вернет 25, а не 2,5, что неверно.
2- Вы можете
decimal.TryParse(str.Replace(",","."), out num);
И он возвращает правильное значение, НО, если пользователь использует ","
в качестве десятичного разделителя не будет работать.
Возможное решение, которое я не могу заставить его работать:
Получить пользователя десятичного разделителя в региональных настройках:
char sepdec = Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
И сделать как-то заменить из ",",sepdec
, таким образом было бы остаться запятой если его запятая, и заменить на фактическую точку, если пользователь использует точки.
Подсказки?
Edit: Многие пользователи размещены полезной информация, в последнее время, используя аргументы NumberStyles.Any, CultureInfo.GetCultureInfo("pt-PT")
на более tryParse
не будет работать, если сепаратор установлен в положении «» Так что довольно много оленьей кожи FULLFILL предпосылки делает TryParse „универсальным“.
Я буду работать вокруг этого, если кто-то имеет больше намеков you'r приветствовать
'2,5' может быть истолковано по-разному в разных странах. Все, что вам нужно, это использовать правильную * CultureInfo * – EZI
Предположим, что значение было 'string str =" 2,500 ";' какое значение это теперь представляет? 2,5 или 2500,0? Невозможно сказать, если вы не знаете культуру, связанную с этим строковым значением. – Alex
Почему вы используете InvariantCulture, когда это определенная культура? –