Ho un ciclo for come sottociclo non è in esecuzione per galleggiare valori
<?php
for($i=0;$i<=10;$i+0.4){
echo $i."<br>";
}
?>
questo codice stampa il valore dei dissodo 9.6 non 10.
perché restituisce il valore di i = 10 alla fine.
Ho un ciclo for come sottociclo non è in esecuzione per galleggiare valori
<?php
for($i=0;$i<=10;$i+0.4){
echo $i."<br>";
}
?>
questo codice stampa il valore dei dissodo 9.6 non 10.
perché restituisce il valore di i = 10 alla fine.
Utilizzare +=
per incrementarlo, anziché solo più. Come è ora, è un loop infinito per me.
Modifica: per qualche motivo PHP non funziona correttamente con diversi tipi di loop.
Questa qui sotto dovrebbe funzionare
for($i=0;$i<=100;$i+=4){
echo $i/10."<br>";
}
Ecco il 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)
Questo è probabilmente il PHP auto-fusione sta facendo che sta causando questo
perché non sta stampando 10. Sto solo chiedendo questo.per favore, – manishjangir
Non è una soluzione. –
@RokKralj Ora una soluzione. – Mob
a causa di rappresentanza di numeri float per macchine - http://en.wikipedia.org/wiki/Floating_point
Si consiglia di utilizzare gli indici interi per i loop
+1. Ma l'uso di indici interi non è sempre possibile. In questi casi devi usare il valore epsilon - ad es. l'errore consentito. Vedi la mia risposta. –
C'è un problema con il confronto accurato FLOAT (che si svolge in =).
fare in questo modo:
for($i=0; $i<=100; $i+=4){
echo ($i/10)."<br>";
}
si potrebbe fare:
<?php
for($i=0;$i<=100;$i += 4){
echo ($i/10)."<br>";
}
?>
risultato qui: http://codepad.org/CxvzEUeq
ma in realtà ho due valori uno è $ start e il secondo è $ end. questi valori possono essere qualsiasi cosa come float o int. quindi il mio ciclo for sarà come per ($ i = $ start; $ <= $ end; $ i = +. 4) – manishjangir
Questo dà problemi quando si effettua il confronto come suggerito in un'altra risposta –
@ user1031816: Ho postato un altro risposta, che mostra come dovrebbe essere fatta la cosa. Con valore epsilon. –
Quando si confrontano, si deve utilizzare il valore Epsilon, che denota il permesso errore quando si confrontano i valori float.
$epsilon=0.000001; //a very small number
for($i=0; $i<10 or abs($i-10)<$epsilon; $i+=0.4){
echo $i."<br>";
}
Per fare un confronto esatto si può arrotondare quelle valore, quanto come seguire ...
<?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>";
}
?>
se u mettere i < = 10 allora continuerò la stampa a valore 10, ma se remove = firmare allora si fermerà alle 9!
Hai fatto un errore, '$ i + 0.4' era probabilmente' $ i + = 0.4', dato che hai detto che saliva fino a 9.6, rendendo 3 risposte sotto non valide. –