2012-05-12 3 views
5
for($i=0;$i<=2;$i+=0.1){ 
    echo $i."<br>"; 
} 

내가 원하는 결과는 다음과 같습니다의도 한 값에 도달하기 전에 루프 정지가 발생하는 이유는 무엇입니까?

0 
0.1 
0.2 
0.3 
0.4 
0.5 
0.6 
0.7 
0.8 
0.9 
1 
1.1 
1.2 
1.3 
1.4 
1.5 
1.6 
1.7 
1.8 
1.9 
2 

어떻게됩니까 대신 루프가 1.9에 도달하고 정지합니다. 왜?

+4

@ 브래드 후, 그 청소 주셔서 감사합니다. 당신은이 질문을 훨씬 더 읽기 쉽고 구제 할 수있게 만들었습니다. +1 질문! 아마도 우리는 투표를하기 전에 질문을 자세히 살펴 봐야 할 것입니다. 투표를 할 수있는 권한이 있기 때문입니다. – jmort253

답변

0

이 때문에 부동 소수점 정밀도로 작동하지 않습니다. 숫자는 기본 2 형식으로 저장되며 절대 반올림되지 않습니다. .1을 1.9에 추가하면 2.0으로 끝나지 않습니다. 당신은 1.99999와 같은 것으로 끝납니다. 다음 반복에서는 기본 2 형식으로 반올림되는 내용에 따라 2.099998과 같은 것으로 끝납니다.

자세한 내용은 또한 당신이 결과를 얻기 위해 이런 식으로 뭔가를 할 수 Floating point numbersDouble-precision floating-point format

참조

for ($i = 0; $i < 2.1; $i += .1){ 
    echo $i . '<br />'; 
} 
+0

을 확인해야합니다. 그것이 내가 빈민굴이라고 부르는 것입니다. – Strawberry

+0

질문은 "왜 작동하지 않는가?"때문에 코드 외에 부동 소수점에 대한 설명이 당신에게 득표를했을 것입니다. – Spudley

+0

감사합니다. 이제 이해합니다! – Jelly

5

floating point ==를 달성하지 않습니다, 왜냐하면에 의해 integer

+0

+1 정확합니다. 이것을 작동 시키려면 == 2.0 – EmmanuelG

0

당신은 할 수 있습니다 :

for($i=0;$i<=20;$i+=1){ 
    echo ($i/10)."<br>"; 
} 
관련 문제