Mi sono imbattuto in diverse stranezze usando l'aritmetica in virgola mobile in javascript, ma non riesco mai a ricordarle in cima alla mia testa!
Quali sono alcuni errori comuni quando usi JavaScript per fare matematica?
Mi sono imbattuto in diverse stranezze usando l'aritmetica in virgola mobile in javascript, ma non riesco mai a ricordarle in cima alla mia testa!
Quali sono alcuni errori comuni quando usi JavaScript per fare matematica?
I problemi comuni con l'aritmetica javascript si riferiscono all'uso di parseInt
o alla mancanza di.
Non utilizzare il radix quando si convertono stringhe in numeri interi:
parseInt("0137"); // 95!
parseInt("0137", 10); // 137
Non si usa parseInt
con aritmetica:
var a = "2";
alert(a + 5); // 25
alert(a - 5): // -3!
Aritmetica in virgola mobile malinteso (valida per tutte le lingue, non solo per JS):
alert(23 * 1.40 == 32.2); // false, 23 * 1.40 is represented as 32.199999999
alert((23 * 1.40).toFixed(1) == 32.2); // true
Il calcolo della valuta con punti mobili può causare errori di arrotondamento, i valori di valuta devono essere trattati come numeri interi (moltiplicati per 100) prima dell'elaborazione.
Un errore comune (anche se con stringhe e interi, non float) sta dimenticando che JavaScript non ha una strong digitazione. Quindi puoi imbatterti in situazioni in cui:
var myVar = 7; // 7
myVar += 5; // 12
var myVar = "7"; // 7
myVar += 5; // 75
var myVar = "cat"; // cat
myVar += 5; // cat5
Tutte queste sono affermazioni perfettamente valide in JavaScript.
Ma diventa più strano, perché mentre "7" e "cat" sono entrambe le stringhe, non tutte le stringhe sono trattate allo stesso modo:
var myVar = 77;
parseInt(myVar); // 77
var myVar = "77";
parseInt(myVar); // 77
var myVar = "cat";
parseInt(myVar); // NaN
var myVar = "77cat";
parseInt(myVar); // 77
Per non parlare di ciò (come ha scritto @Tatu):
var myVar = "077";
parseInt(myVar); // 63
Leggi altre domande sui tag javascript mistakes math