angykiss,

il risultato che ottieni contiene un errore di approssimazione che javascript purtroppo non provvede a correggere in automatico arrotondando per esempio ad un numero prestabilito di decimali quando effettui calcoli in virgola mobile.

Non sapendolo questo può essere causa di grossi problemi soprattutto in un linguaggio scarsamente tipizzato come javascript in cui tutti i numeri vengono gestiti alla stessa maniera nel formato IEEE a 8byte(64 bits) e in cui ti aspetti quindi di poter operare in modo immediato senza scherzi di questo tipo.

L'errore che si presenta ha l'ordine di grandezza del cosiddetto 'epsilon' (in parole semplici il più piccolo numero gestibile dal tuo PC) che puoi calcolare onthefly in questo modo:

<script>
//Find machine epsilon by Armageddon.
function eps(){
var n1=n2=1.0;
while(n1<n1+n2){n2/=2}
return n2*2;
}

alert(eps());
</script>

La soluzione per ora come ti è stato suggerito consiste nel ricordarti di arrotondare i numeri floating al desiderato numero di decimali se non vuoi ottenere risultati 'sporchi' dopo aver fatto operazioni matematiche.

Esempio:

<script>
//Round a number with desired decimals by Armageddon.
function fix(number,dec){
var n=(dec>=0)?Math.pow(10,dec):1e10;
return Math.round(number*n)/n;
}

var pippo=4.231;
var pluto=1.001;
alert('Not fixed = '+(pluto+pippo));
alert('Fixed = '+fix(pluto+pippo));

</script>


P.S: come verifica se provi ad aggiungere un paio di epsilon al risultato 'sporco' dovresti ottenere il risultato teorico atteso.

bye
armaged