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

Я пытаюсь разобрать удваивает вывод из строки с помощью следующего кода:

double.TryParse(contractResult.Result.ValueWithDiscount, NumberStyles.Any, CultureInfo.InvariantCulture, out ValueWithDiscount);
double.TryParse(contractResult.Result.DebitValue, NumberStyles.Any, CultureInfo.InvariantCulture, out Value);

Но по какой-то причине это не работает. У меня есть два сервера, которые имеют разные конфигурации друг от друга. И один разбор "0.5" в 0.5 но другой анализирует 5,

Я также пытался использовать:

double.TryParse(contractResult.Result.DebitValue, NumberStyles.Any, CultureInfo.CurrentCulture, out Value);

Но затем сервер, который правильно анализировал, начал анализировать 50 вместо 0.5, Любой совет, почему это происходит?

Обновить - значения с использованием следующего кода:

NumberFormatInfo loNumberFormatInfo = new NumberFormatInfo();
loNumberFormatInfo.NumberDecimalSeparator = ".";
loNumberFormatInfo.NumberGroupSeparator = ",";
double ValueWithDiscount = 0.0;
double.TryParse(contractResult.Result.ValueWithDiscount, NumberStyles.Any, loNumberFormatInfo, out ValueWithDiscount);    
logger.Log("ValueWithDiscount: " + contractResult.Result.ValueWithDiscount);
logger.Log("ValueWithDiscount Parsed: " + ValueWithDiscount);

Сервер, который работает:

ValueWithDiscount: 0.50
ValueWithDiscount Parsed: 0,5

Сервер, который не работает:

ValueWithDiscount: 0,5
ValueWithDiscount Parsed: 5

1 ответ

Решение

Если вы всегда используете "." в качестве десятичного разделителя вы можете использовать исправление FormatInfo для преобразования.

NumberFormatInfo loNumberFormatInfo = new NumberFormatInfo();
loNumberFormatInfo.NumberDecimalSeparator = ".";
loNumberFormatInfo.NumberGroupSeparator = ",";

double ldOut;
double.TryParse("0.5", NumberStyles.Any, loNumberFormatInfo, out ldOut);

Обновить:

Если ваша строка содержит "." и "," вы можете заменить "," перед конвертированием.

string lsNumber = "0,5";
lsNumber = lsNumber.Replace(",", ".");
Другие вопросы по тегам