mam dla pętli jak poniżejNa pętli nie działa dla liczb rzeczywistych
<?php
for($i=0;$i<=10;$i+0.4){
echo $i."<br>";
}
?>
ten kod wypisuje wartość i till 9.6 nie 10.
dlatego zwraca wartość I = 10 w końcu.
mam dla pętli jak poniżejNa pętli nie działa dla liczb rzeczywistych
<?php
for($i=0;$i<=10;$i+0.4){
echo $i."<br>";
}
?>
ten kod wypisuje wartość i till 9.6 nie 10.
dlatego zwraca wartość I = 10 w końcu.
Użyj +=
, aby zwiększyć wartość, zamiast tylko plusa. Tak jak teraz jest dla mnie nieskończoną pętlą.
Edycja: Z jakiegoś powodu PHP nie działa poprawnie z różnymi typami w pętlach.
poniżej to powinno działać
for($i=0;$i<=100;$i+=4){
echo $i/10."<br>";
}
oto var_dump
int(0)
float(0.4)
float(0.8)
float(1.2)
float(1.6)
int(2)
float(2.4)
float(2.8)
float(3.2)
float(3.6)
int(4)
float(4.4)
float(4.8)
float(5.2)
float(5.6)
int(6)
float(6.4)
float(6.8)
float(7.2)
float(7.6)
int(8)
float(8.4)
float(8.8)
float(9.2)
float(9.6)
int(10)
To chyba auto odlewania PHP robi, że jest przyczyną tego
dlaczego nie drukuje 10. pytam tylko o to. Please – manishjangir
Nie rozwiązanie. –
@RokKralj Teraz rozwiązanie. – Mob
ponieważ reprezentowania liczb zmiennoprzecinkowych dla maszyn - http://en.wikipedia.org/wiki/Floating_point
Zalecam stosowanie indeksów całkowitych dla pętli
+1. Ale używanie indeksów całkowitych nie zawsze jest możliwe. W takich przypadkach musisz użyć wartości epsilon - np. dozwolony błąd. Zobacz moją odpowiedź. –
Występuje problem z dokładnym porównaniem FLOAT (które ma miejsce w < =).
Czy to tak:
for($i=0; $i<=100; $i+=4){
echo ($i/10)."<br>";
}
Można zrobić:
<?php
for($i=0;$i<=100;$i += 4){
echo ($i/10)."<br>";
}
?>
wynik tutaj: http://codepad.org/CxvzEUeq
ale faktycznie mam dwie wartości, jedna to $ start, a druga to $ end. te wartości mogą być dowolnymi rzeczami, takimi jak float lub int. więc moja pętla for będzie podobna do ($ i = $ start; $ <= $ end; $ i = +. 4) – manishjangir
Daje to problem podczas porównywania, jak sugeruje inna odpowiedź –
@ user1031816: Dodałem kolejną odpowiedź, która pokazuje, w jaki sposób rzecz powinna być zrobiona. Z wartością epsilon. –
Porównując, trzeba użyć wartości epsilon, co oznacza dozwolony błąd podczas porównywania wartości zmiennoprzecinkowych.
$epsilon=0.000001; //a very small number
for($i=0; $i<10 or abs($i-10)<$epsilon; $i+=0.4){
echo $i."<br>";
}
Dla dokładnego porównania można zaokrąglić te wartości, gdyż jak po ...
<?php
for($i=0; round($i,1) <= 10; $i += 0.4){
echo $i."<br/>";
}
?>
<?php
for($i=0;$i<10;$i+0.4){
echo $i."<br>";
}
?>
jeśli u umieścić ja < = 10 wtedy będzie kontynuować drukowanie na wartość 10, ale jeśli usuń = podpisać następnie zatrzyma się na 9!
Popełniłeś błąd, '$ i + 0.4' to prawdopodobnie' $ i + = 0.4', ponieważ powiedziałeś, że idzie do 9.6, renderując 3 odpowiedzi poniżej nieprawidłowe. –