Ciao,
sto usando la funzione toFixed per correggere il noto problema di javascript sui decimali.
Ho notato questa anomalia:
codice:
<script language="javascript">
function calcola_sconto(valore,array_sconti){
valore_da_scontare = valore;
for(var i=0;i<array_sconti.length;i++){
importo_da_scontare = (valore_da_scontare * array_sconti[i])/100;
importo_da_scontare = importo_da_scontare.toFixed(6);
valore_da_scontare = valore_da_scontare - importo_da_scontare;
valore_da_scontare = valore_da_scontare.toFixed(6);
}
// valore_da_scontare = valore_da_scontare.toFixed(2);
alert("TOTALE DEFINITIVO :"+valore_da_scontare);
}
elenco_sconti = new Array();
elenco_sconti.push(0.5);
elenco_sconti.push(1.2);
elenco_sconti.push(2);
elenco_sconti.push(1);
da_scontare = 10;
calcola_sconto(da_scontare,elenco_sconti);
</script>
La funzione calcola_sconto riceve come parametro un importo da scontare (nell'esempio, 10) e un array contenenti una serie di sconti da applicare in cascata, come accade su alcune fatture.
Durante il ciclo vorrei mantenere una certa precisione decimale (uso toFixed con 6 decimali), per evitare imprecisioni nel calcolo; il risultato finale però lo vorrei arrotondato a 2 decimali.
Se provo ad usare toFixed(2) sulla somma che esce dal ciclo (commentata nell'esempio) mi dà errore, sia con firefox ("is not a function") che con IE.
Sbaglio qualcosa io o è un problema di javascript?