Сумма в промежуточном выражении с использованием массива, не работающего [дубликат]

Вы хотите, чтобы первый >, которому не предшествовал /. Посмотрите здесь , чтобы узнать, как это сделать.

Однако наивная реализация этого приведет к сопоставлению в этом примере документа


Можете ли вы предоставить немного больше информации о проблема, которую вы пытаетесь решить? Вы выполняете итерацию через теги программно?

126
задан JJJ 11 February 2017 в 09:19
поделиться

20 ответов

Они на самом деле строки не числа. Самый простой способ создать число из строки - это добавить его с помощью +:

var x = +y + +z;
262
ответ дан elclanrs 17 August 2018 в 08:59
поделиться
  • 1
    (я не программист JavaScript) (и я думаю, что это улучшит ответ), что делает + -prefix со строками? – Sebastian Mach 24 January 2013 в 10:10
  • 2
    Вышеприведенный код немного странный и запутает менее опытных разработчиков. Код также не даст JSLint для путаницы использования «+». – Zorayr 24 January 2013 в 10:23
  • 3
  • 4
    @AKTed: На самом деле я хотел спровоцировать elclanrs, чтобы описать его немного внутри его ответа. Конечно, я не могу самостоятельно выполнить поиск Google; но было бы (imo) улучшить качество ответа, особенно потому, что использование префикса-+ для преобразования строк довольно редко встречается на других языках программирования и может путать новичков. (однако, спасибо, что разделили ссылку) – Sebastian Mach 24 January 2013 в 10:37
  • 5
    Я бы запретил кому-либо использовать этот ярлык. Я знаю, что на самом деле синтаксический анализ строки в число требует большего количества кода, но, по крайней мере, код явно соответствует намерению. – Si Kelly 10 May 2017 в 12:33
0
ответ дан 2 revs, 2 users 75% 17 August 2018 в 08:59
поделиться

Вам не хватает преобразования типа во время шага добавления ... var x = y + z; должно быть var x = parseInt(y) + parseInt(z);

 <!DOCTYPE html>

 <html>
 <body>
  <p>Click the button to calculate x.</p>
  <button onclick="myFunction()">Try it</button>
  <br/>
  <br/>Enter first number:
  <input type="text" id="txt1" name="text1">Enter second number:
  <input type="text" id="txt2" name="text2">
  <p id="demo"></p>
 <script>
    function myFunction() 
    {
      var y = document.getElementById("txt1").value;
      var z = document.getElementById("txt2").value;
      var x = parseInt(y) + parseInt(z);
      document.getElementById("demo").innerHTML = x;
    }
 </script>
 </body>
 </html>
1
ответ дан AbcAeffchen 17 August 2018 в 08:59
поделиться
  • 1
    Я добавил разъяснение к вашему ответу, чтобы указать, где проблема. – Stuart Siegler 28 February 2015 в 21:02
  <input type="text" name="num1" id="num1" onkeyup="sum()">
  <input type="text" name="num2" id="num2" onkeyup="sum()">
  <input type="text" name="num2" id="result">

  <script>
     function sum()
     {

        var number1 = document.getElementById('num1').value;
        var number2 = document.getElementById('num2').value;

        if (number1 == '') {
           number1 = 0
           var num3 = parseInt(number1) + parseInt(number2);
           document.getElementById('result').value = num3;
        }
        else if(number2 == '')
        {
           number2 = 0;
           var num3 = parseInt(number1) + parseInt(number2);
           document.getElementById('result').value = num3;
        }
        else
        {
           var num3 = parseInt(number1) + parseInt(number2);
           document.getElementById('result').value = num3;
        }

     }
  </script>
1
ответ дан Ahmad Ajaj 17 August 2018 в 08:59
поделиться
  • 1
    Добавьте некоторое объяснение с ответом, как этот ответ помогает OP в устранении текущей проблемы – ρяσѕρєя K 30 May 2017 в 05:33

, если у нас есть два поля ввода, затем получите значения из полей ввода, затем добавьте их с помощью javascript.

$('input[name="yourname"]').keyup(function(event) {
    /* Act on the event */ 
    var value1 = $(this).val();     
    var value2 = $('input[name="secondName"]').val();
    var roundofa = +value2+ +value1;

    $('input[name="total"]').val(addition);             
});
1
ответ дан Asad Ali 17 August 2018 в 08:59
поделиться

Вам нужно использовать метод javaScript parseInt(), чтобы вернуть строки в числа. Прямо сейчас они являются строками, поэтому добавление двух строк объединяет их, поэтому вы получаете «12».

25
ответ дан L84 17 August 2018 в 08:59
поделиться
  • 1
    Я не уверен, что parseInt() - лучший вариант здесь, когда функция OP добавляет два введенных пользователем «числа», а не «целые числа». – nnnnnn 24 January 2013 в 10:17
  • 2
    @nnnnnn Я думаю, что это может быть легко изменено с помощью parseFloat , если OP предоставит больше ввода. – Yoshi 24 January 2013 в 10:25
  • 3
    @Yoshi - Да, да, возможно, но, учитывая, что ответ фактически не говорит нигде, что parseInt() возвращает только целые числа и не объясняет ни одного из parseInt() 'quirks & quot; - что может быть проблемой с введенными пользователем данными - я думал, что это стоит упомянуть. (Я фактически ничего не делал. – nnnnnn 24 January 2013 в 10:42
  • 4
    Да, я сделал предположение, что ввод будет целым числом, так как они дали пример 1 + 2, но вы правы - parseFloat () может быть лучше, если они всего лишь «цифры». – mitim 24 January 2013 в 11:23
        <head>
<script type="text/javascript">
function addition()
{
var a = parseInt(form.input1.value);
var b = parseInt(form.input2.value);
var c = a+b
document.write(c);
}
</script>
</head>
<body>
<form name="form" method="GET">
<input type="text" name="input1" value=20><br>
<input type="text" name="input2" value=10><br>
<input type="button" value="ADD" onclick="addition()">
</form>
</body>
</html>
1
ответ дан Lakshmi 17 August 2018 в 08:59
поделиться
  • 1
    Добро пожаловать в SO! Не могли бы вы объяснить немного больше? Ваш ответ - это только код, поэтому он может работать, но вопрошающий (или другие посетители!) Может не понимать, почему он работает. – Chilion 11 December 2015 в 10:32

Это старый вопрос, но следующее может быть полезно в общих терминах.

  • Во-первых, поля формы HTML ограничены текстом . Особенно это касается текстовых полей, даже если вы приложили все усилия, чтобы убедиться, что значение выглядит как число.
  • Во-вторых, JavaScript, к лучшему или худшему, перегрузил + с двумя значениями: он добавляет числа и объединяет строки. Он предпочитает конкатенацию, поэтому даже выражение, подобное 3+'4', будет рассматриваться как конкатенация.
  • В-третьих, JavaScript будет пытаться динамически изменять типы, если это возможно, и если это необходимо. Например, '2'*'3' изменит оба типа на числа, поскольку вы не можете умножить строки. Если один из них несовместим, вы получите NaN, а не номер.

Ваша проблема возникает из-за того, что данные, поступающие из формы, рассматриваются как строка, а + поэтому будет сцепляться, а не добавлять.

При чтении предположительно числовых данных из формы вы всегда должны проталкивать ее через parseInt() или parseFloat(), в зависимости от того, хотите ли вы целое или десятичное число.

Обратите внимание, что ни одна из функций по-настоящему не преобразует строку в число. Вместо этого он будет анализировать строку слева направо, пока она не вернется к недопустимому числовому символу или к концу и не конвертирует принятое. В случае parseFloat, который включает одну десятичную точку, но не две.

Все, что после действительного числа просто игнорируется. Там, где они терпят неудачу, если строка даже не начинается с числа. Затем вы получите NaN.

Хорошая техника общего назначения чисел из форм выглядит примерно так:

var data=parseInt(form['data'].value);  //  or parseFloat

Если вы готовы объединить недопустимую строку в 0, вы можете использовать:

var data=parseInt(form['data'].value) || 0;
1
ответ дан Manngo 17 August 2018 в 08:59
поделиться

Здесь идет ваш код, анализируя переменные в функции.

    <html>
      <body>
        <p>Click the button to calculate x.</p>
        <button onclick="myFunction()">Try it</button>
        <br/>
        <br/>Enter first number:
        <input type="text" id="txt1" name="text1">
        <br>Enter second number:
        <input type="text" id="txt2" name="text2">
        <p id="demo"></p>
        <script>
          function myFunction() {
            var y = parseInt(document.getElementById("txt1").value);
            var z = parseInt(document.getElementById("txt2").value);
            var x = y + z;
            document.getElementById("demo").innerHTML = x;
          }
        </script>
      </body>
    </html>

Ответ

0
ответ дан Manoj Krishna 17 August 2018 в 08:59
поделиться

попробуйте это

<!DOCTYPE html>
<html>
<body>

<p> Add Section </p>

<label>First No :</label>
<input id="txt1"  type="text"/><br />
<label>Second No :</label>
<input id="txt2"  type="text"/><br />

<input type="button" name="Add" value="Add" onclick="addTwoNumber()"/>
<p id="demo"></p>
<script>
function myFunction() {
    document.getElementById("demo").innerHTML = Date();
}

function addTwoNumber(){
    var a = document.getElementById("txt1").value;
    var b = document.getElementById("txt2").value;

    var x = Number(a) + Number(b);
    document.getElementById("demo").innerHTML = "Add Value: " + x;
}
</script>

</body>
</html> 
1
ответ дан Mohammed Ebrahim 17 August 2018 в 08:59
поделиться

Простой

var result = parseInt("1") + parseInt("2");
console.log(result ); // Outputs 3
4
ответ дан Murtaza Khursheed Hussain 17 August 2018 в 08:59
поделиться

Вы также можете написать: var z = x - -y; И вы получите правильный ответ.

<body>

<input type="text" id="number1" name="">
<input type="text" id="number2" name="">
<button type="button" onclick="myFunction()">Submit</button>

<p id="demo"></p>

    <script>
    function myFunction() {
        var x, y ;

        x = document.getElementById('number1').value;
        y = document.getElementById('number2').value;

        var z = x - -y ;

        document.getElementById('demo').innerHTML = z;
    }
    </script>
</body>
0
ответ дан P.A.010 17 August 2018 в 08:59
поделиться

Используйте parseFloat, он преобразует строку в число, включая десятичные значения.

 function myFunction() {
      var y = document.getElementById("txt1").value;
      var z = document.getElementById("txt2").value;
      var x = parseFloat(y) + parseFloat(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>
0
ответ дан Poorna Rao 17 August 2018 в 08:59
поделиться

Вы можете сделать предварительную проверку с регулярным выражением, являются ли они номерами как

function myFunction() {
    var y = document.getElementById("txt1").value;
    var z = document.getElementById("txt2").value;
    if((x.search(/[^0-9]/g) != -1)&&(y.search(/[^0-9]/g) != -1))
      var x = Number(y)+ Number(z);
    else
      alert("invalid values....");
    document.getElementById("demo").innerHTML = x;
  }
0
ответ дан Ram 17 August 2018 в 08:59
поделиться
  • 1
    Вместо регулярных выражений вы можете просто использовать parseXX и проверить возврат NaN. – hank 24 January 2013 в 10:30
  • 2
    Проверка введенных пользователем данных всегда является хорошим планом, но вам все равно нужно преобразовать входные строки в числовую форму, прежде чем вы сможете сделать числовое дополнение. – nnnnnn 24 January 2013 в 10:36
  • 3
    да, это правильно .. Я должен был использовать Number (value) .. – Ram 24 January 2013 в 11:01

Я просто использую Number():

var i=2;  
var j=3;  
var k = Number(i) + Number(j); // 5  
93
ответ дан Scott 17 August 2018 в 08:59
поделиться

Этот код суммирует обе переменные! Поместите его в свою функцию

var y = parseInt(document.getElementById("txt1").value);
var z = parseInt(document.getElementById("txt2").value);
var x = (y +z);
document.getElementById("demo").innerHTML = x;`
3
ответ дан tiny sunlight 17 August 2018 в 08:59
поделиться

Привет, друзья, очень просто

<html>
<body>
<p>Click the button to calculate x.</p>
<button onclick="myFunction()">Try it</button>
<br/>
<br/>Enter first number:
<input type="text" id="txt1" name="text1">Enter second number:
<input type="text" id="txt2" name="text2">
<p id="demo"></p>
<script>
  function myFunction() {
    var y = document.getElementById("txt1").value;
    var z = document.getElementById("txt2").value;
    var x = +y + +z;
    document.getElementById("demo").innerHTML = x;
  }
</script>

1
ответ дан user 17 August 2018 в 08:59
поделиться

Это не суммирует число, вместо этого оно будет конкатенировать его:

var x = y + z;

Что вам нужно сделать:

var x = (y)+(z);

Вы должны использовать parseInt в чтобы указать операцию по номерам. Пример:

var x = parseInt(y) + parseInt(z); [final soulution, as everything us]
2
ответ дан Vasily Alexeev 17 August 2018 в 08:59
поделиться

boss просто добавляет простой метод литья, поскольку ввод выполняется при использовании текста после

    var y = parseInt(document.getElementById("txt1").value);
    var z = parseInt(document.getElementById("txt2").value);
    var x = y + z;
5
ответ дан Vibhav Shreshth 17 August 2018 в 08:59
поделиться

Используйте parseInt (...) , но убедитесь, что вы указали значение радиуса; в противном случае вы столкнетесь с несколькими ошибками (если строка начинается с «0», радиус - восьмеричный / 8 и т. д.).

var x = parseInt(stringValueX, 10);
var y = parseInt(stringValueY, 10);

alert(x + y);

Надеюсь, что это поможет!

17
ответ дан Zorayr 17 August 2018 в 08:59
поделиться
  • 1
    Я не уверен, что parseInt() - лучший вариант здесь, когда функция OP добавляет два введенных пользователем «числа», а не «целые числа». – nnnnnn 24 January 2013 в 10:16
  • 2
    Если он не ожидает значений с плавающей запятой, я думаю, что использование этого подхода по-прежнему отлично работает. – Zorayr 24 January 2013 в 10:24
  • 3
    Это уже не проблема в ES6. Радикс может быть безопасно опущен. parseInt("012") отлично работает, возвращаясь 12. Конечно, вам все равно нужно соблюдать такие вещи, как [1,2].map(parseInt). – user 23 September 2016 в 19:07
Другие вопросы по тегам:

Похожие вопросы: