2010-05-13 3 views
2

나는 DataTable에 자료를 얻을 것이다. foreach에 데이터를 반복 할 예정입니다. Datatable에 모든 유형의 데이터가 있습니다. 이제 각 항목 (string)에 DoubleDataTable에 입력해야합니다. 문자열에 IsDouble을 찾는 방법은 무엇입니까?IsBouble에서 Vb.net의 문자열을 확인 하시겠습니까?

예는 :

나는 "21342.2121" 문자열을 가지고있다. 이것을 Double으로 변환해야합니다. 그러나 때때로 데이터는 "TextString"이 될 것입니다. 따라서 Double.Parse()을 사용할 수 없습니다.

처리 방법은 무엇입니까?

답변

1

잘못된 접근 방법입니다. 데이터 테이블의 각 열이 무엇을 나타내는 지 먼저 알아야합니다. 이 프로그램을 실행하면 무엇이 잘못 될지 알 수 있습니다.

Module Module1 
    Sub Main() 
     Dim value As Double 
     If Double.TryParse("1e0", value) Then 
      Console.WriteLine("Uh-oh") 
     End If 
     Console.ReadLine() 
    End Sub 
End Module 
+2

"Uh-oh"은 변환이 성공적으로 완료되었음을 의미합니다! :-) – Maxime

+0

"Infinity"와 "NaN"을 넘어서십시오! –

6

시도 Double.TryParse. 숫자가 유효한/인식 된 형식이 아닌 경우 false를 반환하므로이 시나리오에서 수행해야하는 작업을 수행 할 수 있습니다.

+0

예, Double.TryParse가 James123을 도움이됩니다. – Ram

5
Dim val as Double 
Double.TryParse("MyString", val) 
Double.TryParse("1234.567", val) 

첫 번째 TryParse()는 false를 반환합니다. 두 번째 TryParse()는 true를 반환하고 val에 1234.567을 배치합니다. 다만 이미 제공 한 (올바른) 대답에 확장

5

, 여기 Double.TryParse 사용하는 방법에 대한 전체 코드 예제 :

Dim value As Double 
If Double.TryParse(stringFromDataTable, value) Then 
    ' text has been parsed as value, ' 
    ' so you can use value however you see fit ' 
Else 
    ' text was not a valid double, so you can ' 
    ' notify the user or do whatever you want... ' 
    ' note that value will be zero in this case ' 
End If 
2

내가 물어 봐도 왜 문자열로 두 배를 저장하고 숫자가 아닌 문자열을 혼합 가치? 그것은 모든 비용을 피하는 것이 좋을 것처럼 보입니다.

+0

OP는 데이터 소스를 제어 할 수 없습니다. 예를 들어, 사용자가 만든 쉐이프 파일을로드하기 위해 일부 코드를 작업 중이기 때문에이 질문에 대한 답변을 보았습니다. Google은 허용 된 데이터에 대한 제한을 가지고 있지만 사용자는 각 열의 데이터 유형에 대해 덜 엄격한 요구 사항을 요청했습니다. 어떤 이유로 인해 일부 사용자는 올바른 형식 대신 문자열 데이터 형식을 사용하여 쉐이프 파일을 생성하는 것이 더 간단합니다. – jpmc26

관련 문제