2012-09-20 3 views
5

플로팅 할 문자열을 구문 분석하려고합니다. 문자열이 null이면 0을 전달합니다 (float valule로).입력이 Null 인 경우 핸들을 플로트로 변환

나는 이런 식으로 해석을하고 있었다 :

ERROR MESSAGE : Input string was not in a correct format. 
ERROR SOURCE : at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) 
    at System.Number.ParseSingle(String value, NumberStyles options, NumberFormatInfo numfmt) 
    at System.Single.Parse(String s, NumberStyles style, NumberFormatInfo info) 
    at System.Single.Parse(String s) 

이 상황을 처리하는 가장 좋은 방법을 제안하십시오 : 오류를 준

aeVehicle.MSRP = float.Parse((drInvetory["MSRP"] ?? "0").ToString()); 

. drInvetory["MSRP"]DataRow에서 오는 경우에 따라서 플로트 구문 분석에 실패합니다 DBNull에 비해

+4

"오류를 준" –

+0

qsn의 편집을 참조하십시오. –

답변

8

, 널 병합 연산자는 true로 평가되지 않습니다. DBNull.Value을 비교하거나 float.TryParse()을 사용할 수 있습니다.

aeVehicle.MSRP = float.Parse(drInvetory["MSRP"] == DBNull.Value ? "0" : drInvetory["MSRP"].ToString()); 

개인적으로 원본 코드에서

, 나는 DBNull를 확인하고 float로 캐스팅 (정확한 유형 또는 언 박스, 다음 캐스트) 것입니다. 이렇게하면 비교적 비싼 문자열 구문을 저장할 수 있습니다. 더 나은

aeVehicle.MSRP = drInvetory["MSRP"] == DBNull.Value ? default(float) : 
(float)drInvetory["MSRP"]; 

SQL-CLR 형식 매핑 : 또한 http://msdn.microsoft.com/en-us/library/bb386947.aspx
참조 : Difference between decimal, float and double in .NET?

+0

절대 알지 못해 .. 네 .. 그걸 DataRow에서 가져 왔어. –

+3

사실 'DBNull'은 너무 많은 수준의 큰 고통이다. –

+0

@Tim Medora..i double this this..you right..you 오늘 나에게 멋진 일을 가르쳐 줬어. 고마워. –

0
float f = 0f; 
string s = (drInvetory["MSRP"] ?? "0").ToString(); 
if (s != null) { 
    f = float.Parse(s, ... 
} 
+2

'0.0'은'double'입니다; '0f'는 더 좋을 것이고, 단지'0'입니다. –

+0

감사합니다 - 오늘 Java 토지에있었습니다 (변명의 여지가 없습니다, 0.0은 Java에서도 두 배입니다). – John3136

+0

왜 ToString()입니까? 이미 문자열입니다. 그리고 s는 null 일 수 없으므로 필요하지 않습니다. drInvetory [ "MSRP"]가 문자열이 아니면 컴파일되지 않습니다. –

0

사용한다하여 TryParse :

float num = 0; 
    float.TryParse(s, out num); 
0

그것은 예기치로 인한 수 귀하의 문자열에 쉼표. 쉼표를 먼저 버리십시오. 구문 분석에 실패 할 경우

0
float result = 0; 
float.TryParse(drInvetory["MSRP"], out result); 
aeVehicle.MSRP = result; 

이 방법은, 그것은 항상 폴백합니다 0

0

에 또 다른 간단한 대안은 다음과 같습니다

aeVehicle.MSRP = float.Parse("0" + drInvetory["MSRP"].ToString()); 

는 양수 만 작동합니다. 그렇지 않으면 가장 편리한 Microsoft.VisualBasic.Val 함수를 사용하십시오.

관련 문제