2012-12-11 4 views
3

나는 커져 가기 전에 일부 코드를 테스트하기 위해 Visual Studio에서 간단한 콘솔 응용 프로그램을 사용합니다. 하지만 지금은 몇 가지 문자열을 구문 분석에 문제가 있습니다.
사용자 입력이 String: 0.10 인 경우이 값을 double 값으로 변환하고 싶습니다. 출력은 두 배가되어야합니다 : 0.10.double 0.10 double.parse()를 10.0으로 변환하는 중

하지만 난 다음 코드를 사용하여이 작업을 수행 할 때

double r_value = 0; 
r_value = Math.Round(double.Parse(value), 2); 

또는

r_value = double.Parse(value); 

가 출력 될 것입니다 : 10 또는 10.0. 어떻게이 출력이 이렇게 바뀔 수 있습니까? 그리고 10.0으로 변환하는 대신 0.10으로해야한다고 생각했습니다.

+0

값이 설정되어 있습니까? 이것은 아마도이 부분에서 더 중요한 부분 중 하나 일 것이고 여러분은 그것을 버렸습니다. – Hoeloe

+2

컴퓨터의 번호 설정이 올바르게 설정 되었습니까? 컴퓨터가 점 대신 쉼표를 사용하도록 설정되지 않았습니까? – PedroC88

답변

13

귀하의 기본 문화는 .(주로 대다수 인 경우) 구분자 인 것으로 의심됩니다. 그래서 영어 사람이 "10,000"이라고 쓰면 다른 문화는 "10.000"이라고 쓰게됩니다. 이 시점에서 귀하의 결과는 의미가 있습니다.

당신이 (그룹화 구분 기호로 소수 구분하고 ,. 취급)을 고정 문화권와 구문 분석하려면

그렇게 명시 적으로 수행

double r_value = double.Parse(value, CultureInfo.InvariantCulture); 
+0

'Convert.ToDouble()'도 작동합니까? 아니면 문화에 너무 의존하고 있습니까? –

+0

네, 정말 옳습니다! 내 잘못이야. 귀하의 빠른 응답 주셔서 감사합니다, 그리고 오른쪽 칼럼에 나는 지금이 질문을 참조하십시오 : http://stackoverflow.com/questions/11455306/why-double-parse0-05-returns-5-0?rq=1 (그러나하지 않았다. 게시하기 전에 발견). –

+4

@Bob :'Convert.ToDouble (string)'의 문서에서 : ToDouble (String) 메소드를 사용하는 것은 Double.Parse (String) 메소드에 value를 전달하는 것과 동일합니다. 값은 theFormat의 형식 규약을 사용하여 해석됩니다. 현재 스레드 문화. " –

관련 문제