Двойной .TryParse() вводит десятичный разделитель, отличный от разделителя системы
У меня есть исходный XML, который использует точку ( "." ) в качестве десятичного разделителя, и я разбираю это в системе, которая использует запятую ( "," ) в качестве разделителя десятичной дроби.
В результате значение 0,7 анализируется с Double.TryParse
или Double.Parse
как 7000000.
Каковы мои варианты правильного разбора? Один из них - заменить точки в источнике запятыми на String.Replace('.', ',')
, но я не думаю, что мне это очень нравится.
Ответы
Ответ 1
Стандарт XML имеет четкое представление о форматировании дат и чисел и т.д. Это помогает гарантировать, что XML независим от платформы и совместим с ним. Взгляните на XmlConvert для данных XML.
double value = XmlConvert.ToDouble(stringValue);
Ответ 2
Это задание:
string test = "0.7";
Assert.Equal(0.7, Double.Parse(test, NumberStyles.Float, CultureInfo.InvariantCulture));
Ответ 3
double.TryParse
имеет перегрузку с помощью IFormatProvider. Используйте корпоративную информацию CultureInfo, в вашем случае можно использовать CultureInfo.InvariantCulture.
Ответ 4
Простой способ указать пользовательский разделитель десятичной дроби:
var price = "122$00";
var nfi = new NumberFormatInfo { CurrencyDecimalSeparator = "$" };
var ok = decimal.TryParse(price, NumberStyles.Currency, nfi, out result);