2012-11-28 3 views
5

2 개의 nullable double, 예상 값 및 실제 값이 있습니다 (value 및 valueExpected라고 함). 백분율은 100 * (value/valueExpected)를 사용하여 찾습니다. 그러나 valueExpected가 0이면 NaN을 반환합니다. 지금까지 좋은 모든 것.C#에서 Nullable Double NaN 비교

이제 NaN인지 확인하기 위해 값을 확인해야 할 경우 어떻게해야합니까? (때는 isNaN는 null이 허용되지 않는 변수와 함께 작동)

if (!Double.IsNaN(myDouble)) 

을하지만이 널 (NULL) 값으로 작동하지 않습니다 일반적으로 하나가 사용할 수 있습니다. 나는 체크 (valueExpected == 0)를하기 위해 코드를 변경했지만 여전히 궁금하다. nullable NaN을 검사 할 방법이 있는가?

편집 : 코드가 작동하지 않는다고 말하면 컴파일되지 않습니다. 먼저 null에 대한 테스트가 작동하지 않습니다.

답변

10

모든 Nullable<T> 인스턴스의 경우 먼저 bool HasValue 속성을 확인한 다음 T Value 속성에 액세스 할 수 있습니다.

double? d = 0.0;  // Shorthand for Nullable<double> 
if (d.HasValue && !Double.IsNaN(d.Value)) { 
    double val = d.Value; 

    // val is a non-null, non-NaN double. 
} 
+0

은 아마 저를 방지하기 바로 비주얼 스튜디오의 경우 이중

double.IsNaN((double)myDouble) 

으로이 NaN의 경우는 true와 false를 돌려줍니다. 나는 다음과 같은 것을 가지고있다 : ' if (myDouble! = null) { if (! Double.IsNaN (myDouble)) { // Do stuff! } } ' 하지만이 코드는 컴파일되지 않고 'is null'체크가 된 후에도 IsNaN을 사용하는 것을 좋아하지 않습니다. –

+1

변수 이름 "d"다음에 ".Value"가 보입니까? d.Value는 double이며 꼭 컴파일해야합니다. –

+0

내 코드가 잘 컴파일됩니다. 추가 된 "is null"검사는 아무 것도 변경하지 않습니다. 코드가 여전히 올바르지 않습니다. 'myDouble'은'Nullable '이고'IsNaN()'은'double'을 기대합니다. 당신은 ** 반드시 ** .Value' 속성을 사용해야합니다. –

1

또한 (그 Nullable<> 포장을 제거하여) 그 비 - 널 또는 단지 0.0 경우 myDouble 경우 중 하나는 myDouble되는 가장 안쪽 괄호

if (!Double.IsNaN(myDouble ?? 0.0)) 

값을 사용하여 null. Se ?? Operator (C#).

0

나는 똑같은 문제가 있었는데 이중 주조로 해결 했습니까? 하지