2014-04-19 3 views
0

두 개의 다른 폼이 있으며 폼간에 값을 전달하기 위해 세션을 만들었습니다. 첫 번째 양식에서는 텍스트 상자가 있고 입력 값은 10 진수 값입니다.C# Net에서 세션을 이중으로 변환하는 방법은 무엇입니까?

Session["preprandial"] = txtFasting.Text; 

그런 다음 두 번째 형식으로 변환해야합니다.

double preprandial = Convert.ToDouble(Session["preprandial"]); 

이 코드를 사용할 때 십진수가 올바르게 나타나지 않습니다. 예를 들어; 값이 126.5이면 변환 후 1265.0이됩니다. 그래서, 일부 구문 분석 함수를 사용하려고했지만 그것을 만들 수 없습니다. 어떻게 더블로 변환 할 수 있습니까?

답변

2

당신은 당신이 구분 기호로 쉼표를 사용하는 예를 들어, 문화에 문제가 있고, 프로그램은 점 (또는 그 반대) 예상 : 난 당신이 NumberStyles, IFormatProvider를, 당신에 따라 요구 사항을 지정 TryParse를 사용하는 것이 좋습니다 그래서

예 :

double r; 
    double.TryParse(Session["preprandial"].ToString(), NumberStyles.Any, CultureInfo.CurrentCulture, out r); 

또한 세션의 개체가 아닌지 확인해야합니다.

보통 내가 이중 변환에 대한 다음 확장 방법을 사용하십시오

내가 대신 모든으로 사용해야 수 스타일
public static double ToDouble(this object o) 
    { 
     double d; 
     if (!Double.TryParse((o ?? "").ToString().Replace(",", "."), NumberStyles.Any, CultureInfo.InvariantCulture, out d)) 
      throw new FormatException(String.Format("Can't parse {0} to double", o)); 
     return d; 
    } 
+0

? 그것에 숫자 스타일이 많이 있습니다. –

+0

저는 보통 Any를 사용합니다.하지만 열거 형이므로 필요에 따라 다른 것을 사용하고 싶을 수도 있습니다. – Uriil

+0

문자열을 정의하고이를 12,1에 할당했습니다. 그런 다음 TryParse를 시도하고 12.1로 변환했습니다. 따라서 두 번째 코드가 제대로 작동 할 것입니다. –

관련 문제