ситуации - Культура нить в моем веб-приложение было установлено на «эс» (испанский)Double.TryParse преобразует 0,1 до 1,0
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("es");
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("es");
Значение строка «0,1» Для следующего выражения,
var value = "0.1"
provider = CultureInfo.CreateSpecificCulture("en-US")
double.TryParse(value.ToString(), NumberStyles.Any, provider, out number)
номер возвращается 1.0. Это заставляет меня думать, что он собирает информацию о культуре из потока. Не тот, который я предоставляю.
Следующие испытания модулей проходят (как и ожидалось).
var numberInEnUS = "0.1";
var spanishCulture = CultureInfo.CreateSpecificCulture("es");
culture = new CultureInfo("en-US", false);
Thread.CurrentThread.CurrentCulture = spanishCulture;
Thread.CurrentThread.CurrentUICulture = spanishCulture;
double number;
double.TryParse(numberInEnUs, NumberStyles.Any, culture, out number);
Assert.AreEqual(0.1, number);
Итак, вопрос в том, почему double.TryParse терпят неудачу в моем приложении? Теоретически 0,1 для испанского языка 1 (разделитель для испанский - десятичная точка.). Однако число 1000.0 не преобразуется в 10000. Таким образом, кажется, что он терпит неудачу только для 0,1 Любое объяснение высоко ценится!
Работает отлично для меня –
Культура потока должна быть неактуальной, если вы передаете определенную культуру 'double.TryParse()'. Я заметил, что вы не указали код, в котором вы устанавливаете переменную поставщика; вы на 100% уверены, что отправляете провайдера, которого, по вашему мнению, отправляете? Кстати, лучше использовать «CultureInfo.InvariantCulture», чем «en-US», хотя это не должно иметь никакого значения в вашем случае. –
Wat - это «поставщик», указывающий на? Это самая важная часть, и она отсутствует. –