Ich füge zwei Zahlen hinzu, erhalte aber keinen korrekten Wert.
Wenn Sie beispielsweise 1 + 2
ausführen, wird 12 und nicht 3 zurückgegeben
Was mache ich in diesem Code falsch?
function myFunction() {
var y = document.getElementById("txt1").value;
var z = document.getElementById("txt2").value;
var x = y + z;
document.getElementById("demo").innerHTML = x;
}
<p>
Click the button to calculate x.
<button onclick="myFunction()">Try it</button>
</p>
<p>
Enter first number:
<input type="text" id="txt1" name="text1" value="1">
Enter second number:
<input type="text" id="txt2" name="text2" value="2">
</p>
<p id="demo"></p>
javascript
html
okconfused
quelle
quelle
<input type="number">
, können Sie einfach deren.valueAsNumber
Eigentum direkt erhalten.Antworten:
Sie sind eigentlich Zeichenfolgen, keine Zahlen. Der einfachste Weg, eine Zahl aus einer Zeichenfolge zu erstellen, besteht darin, ihr Folgendes voranzustellen
+
:quelle
+
-prefix aus Neugier (ich selbst kein JavaScript-Programmierer) (und ich denke, dies würde die Antwort verbessern) mit Strings?Ich benutze nur
Number()
:quelle
var k += Number(i)
Sie müssen die JavaScript-
parseInt()
Methode verwenden, um die Zeichenfolgen wieder in Zahlen umzuwandeln . Im Moment handelt es sich um Zeichenfolgen, daher werden sie durch Hinzufügen von zwei Zeichenfolgen verkettet, weshalb Sie "12" erhalten.quelle
parseInt()
die beste Option ist, da die Funktion des OP zwei vom Benutzer eingegebene "Zahlen" und nicht zwei "Ganzzahlen" hinzufügt.parseFloat
wenn das OP mehr Input liefert.parseInt()
nur ganze Zahlen zurückgegeben werden, und keine derparseInt()
"Macken" erklärt - was ein Problem mit vom Benutzer eingegebenen Daten sein könnte - ich dachte, es wäre erwähnenswert. (Ich habe nicht wirklich herabgestimmt oder so.)Verwenden Sie parseInt (...) , stellen Sie jedoch sicher, dass Sie einen Radix-Wert angeben. Andernfalls treten mehrere Fehler auf (wenn die Zeichenfolge mit "0" beginnt, ist der Radix oktal / 8 usw.).
Hoffe das hilft!
quelle
parseInt()
die beste Option ist, da die Funktion des OP zwei vom Benutzer eingegebene "Zahlen" und nicht zwei "Ganzzahlen" hinzufügt.parseInt("012")
funktioniert gut und gibt 12 zurück. Natürlich muss man immer noch vorsichtig mit Dingen wie sein[1,2].map(parseInt)
.Fügen Sie einfach eine einfache Typ-Casting-Methode hinzu, während die Eingabe im Text erfolgt. Verwenden Sie Folgendes:
quelle
Das Folgende kann allgemein nützlich sein.
Erstens sind HTML-Formularfelder auf Text beschränkt . Dies gilt insbesondere für Textfelder, auch wenn Sie sich bemüht haben, sicherzustellen, dass der Wert wie eine Zahl aussieht .
Zweitens hat JavaScript den
+
Operator mit zwei Bedeutungen überladen : Es fügt Zahlen hinzu und verkettet Zeichenfolgen. Es hat eine Präferenz für Verkettung, so dass selbst ein Ausdruck wie3+'4'
als Verkettung behandelt wird.Drittens wird JavaScript versuchen, Typen dynamisch zu ändern, wenn dies möglich ist und erforderlich ist. Beispielsweise
'2'*'3'
werden beide Typen in Zahlen geändert, da Sie Zeichenfolgen nicht multiplizieren können. Wenn einer von ihnen nicht kompatibel ist, erhalten SieNaN
keine Nummer.Ihr Problem tritt auf, weil die aus dem Formular stammenden Daten als Zeichenfolge betrachtet werden und
+
daher eher verkettet als hinzugefügt werden.Wenn Sie vermeintlich numerische Daten aus einem Formular lesen, sollten Sie diese immer durch
parseInt()
oder drückenparseFloat()
, je nachdem, ob Sie eine Ganzzahl oder eine Dezimalzahl wünschen.Beachten Sie, dass keine der beiden Funktionen eine Zeichenfolge wirklich in eine Zahl konvertiert . Stattdessen wird die Zeichenfolge von links nach rechts analysiert, bis ein ungültiges numerisches Zeichen oder das Ende erreicht ist, und das Akzeptierte konvertiert. Im Fall von
parseFloat
umfasst dies einen Dezimalpunkt, aber nicht zwei.Alles nach der gültigen Nummer wird einfach ignoriert. Sie schlagen fehl, wenn die Zeichenfolge nicht einmal als Zahl beginnt. Dann wirst du bekommen
NaN
.Eine gute Allzwecktechnik für Zahlen aus Formularen ist ungefähr so:
Wenn Sie bereit sind, eine ungültige Zeichenfolge auf 0 zusammenzuführen, können Sie Folgendes verwenden:
quelle
Einfach
quelle
Dies wird die Zahl nicht zusammenfassen; stattdessen wird es verkettet:
Sie müssen tun:
Sie müssen parseInt verwenden, um die Operation für Zahlen anzugeben. Beispiel:
quelle
addition
undsubtraction
nicht die akzeptierte.Dieser Code summiert beide Variablen! Setzen Sie es in Ihre Funktion ein
quelle
Sie vermissen die Typkonvertierung während des Additionsschritts ...
var x = y + z;
sollte seinvar x = parseInt(y) + parseInt(z);
quelle
quelle
Es ist sehr einfach:
quelle
Versuche dies:
quelle
quelle
Wenn wir zwei Eingabefelder haben, rufen Sie die Werte aus den Eingabefeldern ab und fügen Sie sie mit JavaScript hinzu.
quelle
Sie können eine Vorprüfung mit regulären Ausdrücken durchführen, unabhängig davon, ob es sich um Zahlen handelt
quelle
Mit
parseFloat
dieser Option wird die Zeichenfolge in eine Zahl mit Dezimalwerten konvertiert.quelle
Sie können auch schreiben: var z = x - -y; Und du bekommst die richtige Antwort.
quelle
Hier geht Ihr Code durch Parsen der Variablen in der Funktion.
Antworten
quelle
Eine alternative Lösung, nur teilen :):
quelle