Dodaję dwie liczby, ale nie otrzymuję poprawnej wartości.
Na przykład wykonanie 1 + 2
zwraca 12, a nie 3
Co robię źle w tym kodzie?
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
źródło
źródło
<input type="number">
, możesz po prostu uzyskać jego.valueAsNumber
własność bezpośrednio.Odpowiedzi:
W rzeczywistości są łańcuchami, a nie liczbami. Najłatwiejszym sposobem wygenerowania liczby z ciągu jest dodanie jej do
+
:źródło
+
przedrostek z łańcuchami?Po prostu używam
Number()
:źródło
var k += Number(i)
Musisz użyć
parseInt()
metody javaScript, aby zamienić ciągi znaków z powrotem na liczby. W tej chwili są to łańcuchy, więc dodanie dwóch łańcuchów łączy je, dlatego otrzymujesz „12”.źródło
parseInt()
jest to najlepsza opcja, biorąc pod uwagę, że funkcja PO dodaje dwie „liczby” wprowadzone przez użytkownika, a nie dwie „liczby całkowite”.parseFloat
jeśli PO dostarczy więcej informacji.parseInt()
zwraca tylko liczby całkowite i nie wyjaśnia żadnychparseInt()
„dziwactw” - które mogą stanowić problem z danymi wprowadzonymi przez użytkownika - I myślałem, że warto wspomnieć. (Właściwie to nie głosowałem ani nic.)Użyj parseInt (...), ale upewnij się, że podałeś wartość radix; w przeciwnym razie napotkasz kilka błędów (jeśli ciąg zaczyna się od „0”, podstawa to ósemka / 8 itd.).
Mam nadzieję że to pomoże!
źródło
parseInt()
jest to najlepsza opcja, biorąc pod uwagę, że funkcja PO dodaje dwie „liczby” wprowadzone przez użytkownika, a nie dwie „liczby całkowite”.parseInt("012")
działa dobrze, zwracając 12. Oczywiście nadal musisz uważać na rzeczy takie jak[1,2].map(parseInt)
.Wystarczy dodać prostą metodę rzutowania, gdy dane wejściowe są pobierane w tekście. Użyj następujących opcji:
źródło
Poniższe informacje mogą być przydatne ogólnie.
Po pierwsze, pola formularza HTML są ograniczone do tekstu . Dotyczy to zwłaszcza pól tekstowych, nawet jeśli zadbałeś o to, aby wartość wyglądała jak liczba.
Po drugie, JavaScript, lepiej lub gorzej, przeciążył
+
operatora dwoma znaczeniami: dodaje liczby i łączy ciągi znaków. Preferuje konkatenację, więc nawet wyrażenie takie3+'4'
będzie traktowane jako konkatenacja.Po trzecie, JavaScript będzie próbował dynamicznie zmieniać typy, jeśli będzie to możliwe i jeśli zajdzie taka potrzeba. Na przykład
'2'*'3'
zmieni oba typy na liczby, ponieważ nie można pomnożyć ciągów. Jeśli jeden z nich jest niezgodny, otrzymaszNaN
: Nie liczba.Twój problem występuje, ponieważ dane pochodzące z formularza są traktowane jako ciąg znaków, a
+
dlatego też zostaną połączone, a nie dodane.Podczas odczytywania rzekomo numerycznych danych z formularza należy zawsze przepychać je przez
parseInt()
lubparseFloat()
, w zależności od tego, czy chcesz liczbę całkowitą czy dziesiętną.Zauważ, że żadna funkcja naprawdę nie konwertuje ciągu na liczbę. Zamiast tego będzie analizować ciąg od lewej do prawej, aż dojdzie do nieprawidłowego znaku numerycznego lub do końca i przekształci to, co zostało zaakceptowane. W przypadku
parseFloat
, który obejmuje jeden przecinek dziesiętny, ale nie dwa.Wszystko po poprawnym numerze jest po prostu ignorowane. Zawodzą, jeśli ciąg nie zaczyna się nawet od liczby. Wtedy dostaniesz
NaN
.Dobra technika ogólnego zastosowania dla liczb z formularzy jest mniej więcej taka:
Jeśli jesteś przygotowany na połączenie niepoprawnego ciągu do 0, możesz użyć:
źródło
Prosty
źródło
To nie sumuje liczby; zamiast tego połączy to:
Musisz zrobić:
Musisz użyć parseInt, aby określić operację na liczbach. Przykład:
źródło
addition
asubtraction
nie zaakceptowana.Ten kod sumuje obie zmienne! Umieść to w swojej funkcji
źródło
Brakuje konwersji typu podczas kroku dodawania ...
var x = y + z;
powinno byćvar x = parseInt(y) + parseInt(z);
źródło
źródło
To jest bardzo proste:
źródło
Spróbuj tego:
źródło
źródło
Jeśli mamy dwa pola wejściowe, pobierz wartości z pól wejściowych, a następnie dodaj je za pomocą JavaScript.
źródło
Możesz wykonać wstępne sprawdzenie za pomocą wyrażenia regularnego, gdy są one liczbami jak
źródło
Użyj
parseFloat
go, aby przekonwertować ciąg na liczbę, w tym wartości dziesiętne.źródło
Możesz także napisać: var z = x - -y; I otrzymujesz poprawną odpowiedź.
źródło
Oto twój kod, analizując zmienne w funkcji.
Odpowiedź
źródło
Alternatywne rozwiązanie, po prostu udostępniam :):
źródło