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

Keşke sonucudur:Neden bu amaç, amaçlanan değere ulaşmadan önce durur?

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 

Yerine ne olur döngü 1.9 ulaşır ve ötededir. Niye ya?

+4

@Brad sonra, o temizlik için teşekkürler. Bu soruyu çok daha okunaklı ve kurtarılabilir hale getirdiniz. Soruya +1! Belki de onu çevirme gücüne sahip olduğumuzdan, oylamadan önce bir soruya daha yakından bakmalıyız. – jmort253

cevap

0

Bunun nedeni duyarlılığında için çalışmaz. Sayılar taban 2 formatında saklanır ve yuvarlama nedeniyle asla kesin değildir. 1,1 ila 1,9 eklediğinizde, 2.0 ile bitmezsiniz. Sonunda 1.99999 gibi bir şeyle bitirin. Bir sonraki yinelemede, 2. basamağında yuvarlandığı şeye bağlı olarak 2.099998 gibi bir şeyle sonuçlanacaksınız.

fazla bilgi için Ayrıca sen sonuç almak için böyle bir şey yapabileceğini Floating point numbers ve Double-precision floating-point format

bkz

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

'u kontrol etmem gerekiyor. – Strawberry

+0

sorusu "neden çalışmıyor" şeklindeydi, bu yüzden kayan noktalara ek olarak kayan noktalarla ilgili bazı açıklamalar size oy vermiş olurdu. – Spudley

+0

Teşekkürler, şimdi anlıyorum! – Jelly

5

o floating point == ulaşmak asla Çünkü tarafından integer

+0

+1 Tam olarak. Bunun işe yaramasını istiyorsanız, == 2.0 – EmmanuelG

0

Sen yapabilirsiniz:

for($i=0;$i<=20;$i+=1){ 
    echo ($i/10)."<br>"; 
} 
İlgili konular