2012-05-18 2 views
0

작동하지?층의 기능은 다음과 대구 감안할 때

float(0.54999999999995) 

이 경우 0.55와 같은 고정 값을 원합니다. 도와 줄수있으세요?

+2

부동 소수점 산술은 항상 정확하지는 않습니다. 매우 많은 복제본 ... – Ryan

+0

나머지를 찾고 계십니까? –

+0

그래, 그냥 나머지는 –

답변

3

부동 소수점 연산은 정확하지 않으며 나머지 오류는 공통입니다. 알고 계시다면 원하는 점 (예 : 점 다음 두 자리)은 무엇입니까? 결과에 round() 함수를 사용할 수 있습니다. 이 경우이 될 것입니다 :

$number = 1050.55; 
var_dump(round($number - floor($number), 2)); 
1

this question을 참조하십시오. 그것이 자바에 관한 것이고 PHP에 대해 묻는다면 수학은 같습니다.

+0

그것은 내가 정확하지 않은 이유를 이해하는 데 도움이 감사합니다 Logged –

2

대부분의 수레를 들어, 바이너리는 약 정확한 숫자를 나타낼 수 있습니다. 규칙은 일련의 계산에서 마지막으로 floor(), ceil() 또는 fmod()를 수행하는 것입니다. 적어도 정수 수학을 사용하면됩니다. 코드에서와 같이 int를 float으로 캐스팅하면 floor()가 예상대로 작동하지 않습니다.

수레를 인쇄 할 때 printf()를 사용하십시오. 변환 루틴은 대개 훨씬 잘 수행되며자를 때 잘릴 수있는 대답을 제공합니다.

EDIT : 더 정확하게 말하자면, printf()는자를 장소를 결정할 때 숫자의 소수 문자 표현에 대해 작동하므로 이상하고 불특정 한 2 진수/10 진수 변환 아티팩트를 얻지 못합니다.