2011-01-22 5 views
0

float 값이 0.5, 1.5, 10.5와 같이 정수의 절반이라고 말하는 것이 가장 효율적인 방법은 무엇입니까?플로트를 정의하는 방법은 숫자의 절반입니까?

먼저 무엇을 내 마음에 오는 :

$is_half = (($number - floor($number)) === 0.5); 

은 더 나은 솔루션 있나요?

+2

** 절대 ** 부동 소수점 숫자에 평등을 사용하여 비교합니다. 상속 된 부정확성이 있습니다. – poke

+2

@poke : 0.5는 float와 똑같이 나타낼 수 있으므로 정수가 매우 커질 때까지는 문제가 없어야합니다. –

+1

@Michael : 정수 부분이 큰 값을 얻는다면 소수점은 정밀도 부족으로 더 이상 저장되지 않습니다 ... 그래서 소수점 다음에 .5 인 모든 float에 대해 정확한 표현 ... – ircmaxell

답변

3

부동 소수점 정밀도 오류 때문에 일반적으로 차이가 약간의 양보다 작은 지 확인해야합니다 (그러나 0.5는 정확하게 표현할 수 있으므로 문제가되지 않습니다.)하지만 일반적으로 float). 그래서 코드는 일반적으로 당신이 할 수 있습니다, 특정 의미에 대한 좋은 :

if (abs($number - floor($number) - $decimal) < 0.0001) { 
+0

$ 수는 정수의 절반으로 어떻게 결정됩니까? –

0
if(abs($number) - (int)(abs($number)) == 0.5) { 
    // half of an integer. 
} 
관련 문제