4 Stimmen

Javascript behandelt Variablen als Strings, warum?

Ich habe die Variable y, die eine Zwischensumme ist. Ihr Wert ist unterschiedlich, je nachdem, was mit der HTML passiert, aber im gesamten Skript habe ich sie wie folgt deklariert:

var y = 21.78;

usw. Warum werden sie bei meiner letzten Gleichung, bei der ich die Summe addiere, als Zeichenketten behandelt, wenn ich die Werte addieren möchte?

var tax = (0.055*y).toFixed(2);
var totalprice = y+tax;
/* totalprice holds "21.781.20" instead of 22.98 */

10voto

Mike Christensen Punkte 82109

Laut:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number/toFixed

toFixed() zurück:

Eine String-Darstellung einer Zahl, die nicht Notation verwendet und genau Ziffern nach der Dezimalstelle hat.

also, y+tax wird in eine Zeichenkette umgewandelt, da einer der Operanden eine Zeichenkette ist.

Meiner Meinung nach würde dies Sinn machen, da Javascript's intrinsische numerische Typen nicht die Fähigkeit haben, eine bestimmte Anzahl von Dezimalstellen zu speichern, so dass eine Zeichenfolge die am besten geeignete Datenstruktur wäre, um dies zu speichern mit.

Ich würde Ihnen raten, alle Ihre Ergänzungen vorzunehmen. vor aufrufen toFixed() da sich diese Methode am besten für die Formatierung von Bildschirmausgaben eignet.

var taxRate = 0.055;
var subtotal = 21.78;

var tax = (taxRate * subtotal).toFixed(2),
totalprice = ((1+taxRate) * subtotal).toFixed(2);
document.write(totalprice);

3voto

nnnnnn Punkte 142888

Die Methode .toFixed() gibt eine Zeichenkette zurück. Versuchen Sie, diese Methode als letzten Schritt nach allen anderen Berechnungen anzuwenden.

3voto

Larry Battle Punkte 8642

Hier ist eine einfache Lösung. Setzen Sie ein "+" vor die Steuervariable, um sie in eine Zahl zu konvertieren.

var y = 21.78;
var tax = (0.055*y).toFixed(2);
var totalprice = y+ (+tax);
totalprice === 22.98;

Wenn Sie bei der Verwendung von toFixed keine Rundungsfehler wünschen, sollten Sie diese Neuimplementierung in Ihr Skript aufnehmen. http://bateru.com/news/2012/03/reimplementation-of-number-prototype-tofixed/

1voto

Tim Punkte 751

Meiner Erfahrung nach sieht Javascript das "+"-Zeichen, wenn überhaupt, als Verkettung und nicht als Addition. Es hat mich bei mehr als einer Gelegenheit verrückt gemacht. Ich werde in der Regel tun dies eher als Chance Verkettung:

var totalprice = parseInt(y)+parseInt(tax);

-1voto

Wenn der Buchstabe den Wert ersetzt, multiplizieren Sie mit 1 wenn Sie Folgendes brauchen + .

var totalprice = (y*1) + tax . 

Andere Operanden funktionieren problemlos, es ist nur die + Operand, der besonders behandelt werden muss, wenn die Variable den Wert ersetzt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X