-
Js sbaglia a contare! !
Salve a tutti! Questa mattina al lavoro sono incappato in qualcosa di inspiegabile! ehehe e vorrei sapere se qualcuno di voi sa di cosa si tratta.
Codice Js semplicissimo:
Codice:
<script>
function calcola()
{
tot = 4.1*30;
alert(tot);
}
</script>
<input type="button" onclick="calcola()" value="calcola">
Se faccio 4.1 per un qualsiasi numero (10, 20 eccc) mi da il risultato corretto, mentre se lo moltiplico per 30 o un suo multiplo mi da un numero periodico che non dovrebbe esserci O.o ma perchè?
Mentre se faccio tipo
Codice:
<script>
function calcola()
{
tot = 4.1*30;
tot = tot+10;
tot = tot-10;
alert(tot);
}
</script>
<input type="button" onclick="calcola()" value="calcola">
Ritorna per bene senza numero periodico, O.o Stranissimo!!! !
:P
-
I calcoli con numeri in virgola mobile sono necessariamente approssimati, inoltre ricorda che benché tu li scriva in base dieci, la loro rappresentazione in memoria è in base due e un numero che è periodico in una base non necessariamente lo è in un altra e viceversa.
Questo è proprio uno di quei casi, infatti un decimo in base due è periodico: 0,0(0011).
Ci sono comunque altri errori di approssimazione che possono causare risultati inaspettati, consulta la voce di Wikipedia relativa ai numeri in virgola mobile per maggiori dettagli.