Eventuali duplicati:
Why can't decimal numbers be represented exactly in binary?
problem with floating valuesPHP errori virgola mobile con base matematica
$var1 = 1;
for ($i=0; $i<30; $i++) {
$var1 += 0.1;
$var2 = floor($var1);
$var3 = $var1-$var2;
if ($var3 == 0.5) {
$var1 = $var2+1;
}
}
L'intenzione di questo ciclo è di contare 1.0, 1.1, 1.2, 1.3, 1.4, quindi passare a 2.0, 2.1, 2.2, ecc.
Il problema che sto ottenendo è che l'istruzione if
non è mai vera. Inoltre ogni decimo calcolo si risolve in una pazza risposta scientifica.
Come posso risolvere questo problema? per favore aiuto!
Modifica: Ho scritto la domanda in un momento un po 'frustrato ed era più di una, lo vedo ora.
La prima parte della domanda era "come posso fare questo lavoro superando questo quo virgola mobile" e "perché questo querk sta accadendo!"
Grazie per tutte le grandi risposte e sto votando la risposta come corretta che ha risposto facilmente alla domanda principale di "come fare questo lavoro".
Utilizzare 0,49 anziché 0,5 e> invece di ==. Crude e non il miglior codice al mondo, ma risolve la domanda originale. Grazie a tutti per le altre risposte che leggerò e seguirò per migliorare la mia codifica.
Ancora una volta, molte grazie.
Forse postare quale "pazza risposta scientifica" è ??? – mathematician1975
possibile duplicato di [problema con valori fluttuanti] (http://stackoverflow.com/questions/6503994/problem-with-floating-values), [Capire i numeri in virgola mobile in php] (http://stackoverflow.com/questions/10991713/understanding-floating-point-numbers-in-php), ecc. – fresskoma
Un'ottima spiegazione dei problemi in virgola mobile: http://stackoverflow.com/questions/1089018/why-cant-decimal-numbers-be-represented-exactly-in-binary – mtrw