1.0 상황 변환 - 내 웹 응용 프로그램에서 스레드 문화 '가 말이지'로 설정하고있다 (스페인어)Double.TryParse 0.1
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입니다 (스페인어의 경우 구분 기호는 소수점 '.'). 그러나 1000.0은 10000으로 변환되지 않습니다. 따라서 0.1 만 실패합니다. 모든 설명을 높이 평가합니다!
나를 위해 잘 작동 –
특정 문화권을'double.TryParse()'에 전달하는 한 스레드 문화권은 관련이 없어야합니다. 나는 당신이 공급자 변수를 설정 한 코드를 포함하지 않았다는 것을 알아 차렸다; 당신이 보낸다고 생각하는 공급자를 100 % 확신하고 있습니까? 그건 그렇고, "CultureInfo.InvariantCulture"를 "en-US"보다 사용하는 것이 더 나을 것입니다. –
Wat는 'provider'를 가리 킵니까? 그게 가장 중요한 부분이고 그것은 없어졌습니다. –