Двойной .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);