Я добавляю два числа, но я не получаю правильное значение.
Например, выполнение 1 + 2
возвращает 12, а не 3
Что я делаю не так в этом коде?
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
источник
источник
<input type="number">
, вы можете просто получить его.valueAsNumber
собственность напрямую.Ответы:
На самом деле это строки, а не числа. Самый простой способ получить число из строки - добавить к нему
+
:источник
+
-prefix делает со строками?Я просто использую
Number()
:источник
var k += Number(i)
Вам нужно использовать
parseInt()
метод javaScript, чтобы превратить строки обратно в числа. Прямо сейчас они являются строками, поэтому добавление двух строк объединяет их, поэтому вы получаете «12».источник
parseInt()
это лучший вариант, учитывая, что функция OP добавляет два введенных пользователем "числа", а не два "целых числа".parseFloat
если ОП предоставит больше информации.parseInt()
возвращаются только целые числа, и не объясняются какие-либоparseInt()
«причуды» - что может быть проблемой с данными, введенными пользователем - я думал, что стоит упомянуть. (На самом деле я не понизил голос или что-то в этом роде.)Используйте parseInt (...), но убедитесь, что вы указали значение radix; в противном случае вы столкнетесь с несколькими ошибками (если строка начинается с «0», основание будет восьмеричным / 8 и т. д.).
Надеюсь это поможет!
источник
parseInt()
это лучший вариант, учитывая, что функция OP добавляет два введенных пользователем "числа", а не два "целых числа".parseInt("012")
работает нормально, возвращая 12. Конечно, вы все равно должны быть осторожны с такими вещами, как[1,2].map(parseInt)
.Просто добавьте простой метод приведения типов, поскольку ввод берется в текст. Используйте следующее:
источник
Следующее может быть полезно в общих чертах.
Во-первых, поля формы HTML ограничены текстом . Это особенно относится к текстовым полям, даже если вы приложили все усилия, чтобы значение выглядело как число.
Во-вторых, JavaScript, к лучшему или к худшему, перегружал
+
оператора двумя значениями: он добавляет числа и объединяет строки. У него есть предпочтение для конкатенации, поэтому даже выражение like3+'4'
будет рассматриваться как конкатенация.В-третьих, JavaScript будет пытаться динамически изменять типы, если это возможно, и при необходимости. Например
'2'*'3'
, оба типа будут заменены числами, поскольку вы не можете умножать строки. Если один из них несовместим, вы получитеNaN
, а не номер.Ваша проблема возникает из-за того, что данные, поступающие из формы, рассматриваются как строка, а
+
поэтому они будут объединяться, а не добавляться.Читая предположительно числовые данные из формы, вы всегда должны проталкивать их
parseInt()
илиparseFloat()
, в зависимости от того, хотите ли вы целое или десятичное число.Обратите внимание, что ни одна из функций действительно не преобразует строку в число. Вместо этого он будет анализировать строку слева направо, пока не достигнет недопустимого числового символа или до конца, и преобразует то, что было принято. В случае
parseFloat
, это включает в себя один десятичный знак, но не два.Все, что находится после действительного номера, просто игнорируется. Они терпят неудачу, если строка даже не начинается как число. Тогда вы получите
NaN
.Хорошая техника общего назначения для чисел из форм выглядит примерно так:
Если вы готовы объединить недопустимую строку в 0, вы можете использовать:
источник
просто
источник
Это не будет суммировать число; вместо этого это объединит это:
Вам нужно сделать:
Вы должны использовать parseInt, чтобы указать операцию над числами. Пример:
источник
addition
аsubtraction
не принятый.Этот код суммирует обе переменные! Поместите это в свою функцию
источник
Вы пропускаете преобразование типов на этапе добавления ...
var x = y + z;
должно бытьvar x = parseInt(y) + parseInt(z);
источник
источник
Это очень просто:
источник
Попробуй это:
источник
источник
Если у нас есть два поля ввода, тогда получите значения из полей ввода, а затем добавьте их с помощью JavaScript.
источник
Вы можете выполнить предварительную проверку с помощью регулярного выражения, если они числа как
источник
Используйте
parseFloat
его, чтобы преобразовать строку в число, включая десятичные значения.источник
Вы также можете написать: var z = x - -y; И вы получите правильный ответ.
источник
Здесь идет ваш код путем анализа переменных в функции.
Ответ
источник
Альтернативное решение, просто поделиться :)
источник