2013-03-15 5 views
1

나는 그 값이 내가 동적으로 얻는 값이 0.94289988675이고 또한 값이 0.94289988777 인 또 다른 double을 얻는다. 두 값을 비교하면된다. 그러나 그들은 그것이 같지 않다고 말한다. 그 값의 처음 네 자리까지는 어떻게 비교할 수 있습니까?두 개의 값을 비교하는 것

코드 :

for (z = 0; z < something.Count(); z++) 
{ 
    if (largest == Math.Round(0.94289988675 [z],4)) 
    { 
     //proceed 
    } 
} 

최대 = 0.94289988675 0.94289988675 [Z] 0.94289988777 온다. z는이다.

루프가 진행되지 않습니다. 제발 도와주세요.

+3

[Math.Round] (http://msdn.microsoft.com/en-us/library/f5898377.aspx) 구문이 잘못되었습니다. – Romoku

+0

무엇이 있습니까? 배열에서 가장 큰 숫자를 찾으십니까? – Novice

+0

'0.94289988675'에 따라 Decimal을 사용해야할까요? – t3hn00b

답변

9

어떻게 당신이 4 개 자리가 아닌 4 개 비트를 의미 가정 최초의 4 비트

까지 비교할 수 있습니다.

그냥 차이의 절대 값을 취

if (Math.Abs(largest - 0.94289988675) < 0.0001) 
{ 
    //proceed 
} 

평등 부동 소수점 형식으로 꽤 어려운 개념이다, 당신은 평등 부동 소수점 값 테스트 결코 간단한 ==

+0

아마도 누군가 어떻게 작동하는지 설명해야합니까? 제발, 제발! = D – Sinatr

+0

@Sinatr - 아주 간단한 코드 줄입니다. 설명 할 부분은 무엇입니까? –

+0

마지막 편집 이후 아무 것도 없습니다 ('threshold'가 사라지고'=='부분). 당신을 비교하는 대신 다른 아이디어를 가진 해결책을 제시 할 때 - 사람들은이 아이디어를 설명 할 필요가 있습니다. 설명을 위해 – Sinatr

6

를 사용하지 않습니다. 이제까지. 모든 프로그래밍 언어에서. 이것을 처리하는 가장 일반적인 방법은 다른 것을 빼고이 차이를 일반적으로 엡실론이라고하는 작은 수와 비교하는 것입니다. 귀하의 경우 첫 4 자리 숫자는 0.001이 적합 할 수 있습니다. 두 숫자의 차이가 엡실론 값보다 작 으면 짝수로 간주됩니다.

double x = ?; 
double y = ?; 
double epsilon = 0.001; 

var difference = Math.Abs(x - y); 

var isEqual = difference < espilon; 

하지이에 대한 상수 Double.Epsilon를 사용해야 함을 유의하시기 바랍니다. 그것은 나쁜 명명법 일 뿐이며 완전히 무관 한 것입니다.

+0

+1! –

+3

'double.Epsilon'은 매우 관련이 있지만 여기서는 실제로 사용하지 말아야합니다. –

관련 문제