두 개의 비 integer 번호의 정수 부분을 비교하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/236323

  •  04-07-2019
  •  | 
  •  

문제

불평등을 위해 두 개의 복식의 정수 부분을 비교해야하며 현재 다음을 수행하고 있습니다.

int iA = (int)dA;
int iB = (int)dB;

if( iA != iB )
{
    ...
}

그러나 나는 이것보다 더 나은 접근법이 있는지 궁금합니다.

감사.

int에 대한 캐스트 대신 Math.truncate ()를 사용한 경우 평등에 대한 이중 값을 비교하는 것이 여전히 정확합니까?

헝가리 표기법에 대해 의견 :

나는 적어도 대부분의 사람들이하는 방식이 아니라 HN을 직접 사용하지 않습니다. 그러나 이것은 변수의 의미 론이 해당 유형과 직접 관련된 드문 경우 중 하나입니다. A_AS_INTEGER 및 B_AS_NONINTEGER와 같은 다른 구문을 선택할 수 있었지만 그 차이는 무엇입니까?

도움이 되었습니까?

해결책

Math.Truncate () IE를 사용하십시오

if (Math.Truncate(x) == Math.Truncate(y))

편집] 더블의 정수 부분을 비교하는 경우 int 값으로 캐스팅하면 먼저 int로 표시 될 수있는 범위를 벗어나면 오버 플로우의 위험이 먼저 실행된다는 것을 깨달았습니다.

Truncate는이 문제를 피하면서 소수점 또는 두 배를 반환합니다.

다른 팁

예, 그것은 최선의 접근법입니다.

당신의 문구에서 당신의 질문에서 당신은 반올림에 대해 걱정하지 않습니다 ... 단지 정수 자체 만 있습니다.

즉. (int) 4.1은 (int) 4.9와 동일한 결과를 제공합니다.

OVID가 언급했듯이 비교를 위해 변수 만 필요하면 비교 문에서 더블을 시전하면됩니다. 나는 이론 만보고 있었다.

개인적으로, 나는 필요하지 않으면 추가 변수를 생성하지 않으려 고 노력합니다.

if ( (int)dA != (int)dB ) {
    ...
}

코드가 시간이 지남에 따라 진화함에 따라 목적이없는 여분의 변수가 없으면 혼란이 발생합니다. 물론 변수가 필요한 경우 또 다른 문제입니다 :)

참고 : 간단한 헝가리 표기법을 통해 데이터 유형을 힌트하려고하는 것 같습니다. 그렇게하지 않는 것이 좋습니다. 변수에 정보를 접두사 해야하는 경우 변수가 유형이 아닌 변수의 내용을 접두사하십시오. 그렇게하면 코드의 실수가 더 쉽게 볼 수 있습니다.

if ( (int)ageA != (int)idB ) {
    ...
}

이 경우, 데이터가 무엇인지 모르고 '나이'를 'ID'와 비교하려고하는 것을 보는 것은 여기서 무언가 잘못되었다는 단서입니다.

나는 Truncate가 당신이 원하는 것임에 동의합니다.

유용한 정보 MSDN:

Truncate는 분수 숫자가 폐기 된 후에 남아있는 숫자를 반환합니다.

가장 가까운 정수로 둥글게 둥글게됩니다.

double floatNumber;

floatNumber = 32.7865;
// Displays 32      
Console.WriteLine(Math.Truncate(floatNumber));

floatNumber = -32.9012;
// Displays -32       
Console.WriteLine(Math.Truncate(floatNumber));
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top