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