Как добавить две строки, как если бы они были номерами?

У меня есть две строки, содержащие только числа:

var num1 = '20',
    num2 = '30.5';

Я бы ожидал, что я смогу добавить их вместе, но вместо этого они объединяются:

num1 + num2; // = '2030.5'

Как заставить эти строки обрабатывать числа?

Ответ 1

Я бы использовал оператор унарного плюса, чтобы сначала преобразовать их в числа.

+num1 + +num2;

Ответ 2

MDN-документы для parseInt

MDN docs для parseFloat

В parseInt radix указывается как десять, так что мы находимся в базе 10. В нестрочном javascript число, добавленное с помощью 0, рассматривается как восьмеричное. Это, очевидно, вызовет проблемы!

parseInt(num1, 10) + parseInt(num2, 10) //base10
parseFloat(num1) + parseFloat(num2)

Также см. ответ ChaosPandion на полезную комбинацию с помощью унарного оператора. Я создал скрипку, чтобы показать разные типы поведения.

http://jsfiddle.net/EtX6G/

var ten = '10';
var zero_ten = '010';
var one = '1';
var body = document.getElementsByTagName('body')[0];

Append(parseInt(ten) + parseInt(one));
Append(parseInt(zero_ten) + parseInt(one));
Append(+ten + +one);
Append(+zero_ten + +one);

function Append(text) {
    body.appendChild(document.createTextNode(text));
    body.appendChild(document.createElement('br'));
}

Ответ 3

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

(+varname)

Итак, в вашем случае это:

var num1 = '20',
    num2 = '30.5';

var sum = (+num1) + (+num2);

// Just to test it
console.log( sum ); // 50.5

Ответ 4

var result = Number(num1) + Number(num2);

Ответ 5

преобразуйте строки в floats с помощью parseFloat(string) или integers с помощью parseInt(string)

Ответ 6

Вы можете использовать это, чтобы добавить числа:

var x = +num1 + +num2;

Ответ 7

Если вам нужно добавить две строки вместе, которые являются очень большими числами, вам нужно оценить сложение в каждой позиции строки:

function addStrings(str1, str2){
  str1a = str1.split('').reverse();
  str2a = str2.split('').reverse();
  let output = '';
  let longer = Math.max(str1.length, str2.length);
  let carry = false;
  for (let i = 0; i < longer; i++) {
    let result
    if (str1a[i] && str2a[i]) {
      result = parseInt(str1a[i]) + parseInt(str2a[i]);

    } else if (str1a[i] && !str2a[i]) {
      result = parseInt(str1a[i]);

    } else if (!str1a[i] && str2a[i]) {
      result = parseInt(str2a[i]);
    }

    if (carry) {
        result += 1;
        carry = false;
    }
    if(result >= 10) {
      carry = true;
      output += result.toString()[1];
    }else {
      output += result.toString();
    }
  }
  output = output.split('').reverse().join('');

  if(carry) {
    output = '1' + output;
  }
  return output;
}

Ответ 8

попробовать

var x = parseFloat(num1) + parseFloat(num2) ;

или, в зависимости от ваших потребностей:

var x = parseInt(num1) + parseInt(num2) ;

http://www.javascripter.net/faq/convert2.htm

Возможно, вы захотите забрать книгу Javascript: The Good Parts, автор Douglas Crockford. Javascript имеет довольно значительную коллекцию gotchas! Эта книга проделала долгий путь к их разъяснению. См. Также

и г-н Крокфорд отличный эссе, Javascript: мир, который не понимает язык программирования.

Ответ 9

Я всегда просто вычитал ноль.

num1-0 + num2-0;

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

Ответ 10

Если вы хотите выполнить операцию с числами как строки (как в случае, если число может превышать 64 бит), вы можете использовать big-integer библиотека.

const bigInt = require('big-integer')
bigInt("999").add("1").toString() // output: "1000"

Ответ 11

function sum(){
    var x,y,z;
    x = Number(document.getElementById("input1").value);
    y = Number(document.getElementById("input2").value);
    z = x + y;
    document.getElementById("result").innerHTML = z ;
}

Ответ 12

Здесь у вас есть два варианта сделать это:

1. Вы можете использовать унарный плюс, чтобы преобразовать номер строки в целое число.

2. Вы также можете добиться этого путем разбора числа в соответствующий тип. т.е. parseInt(), parseFloat() и т.д.

,

Теперь я собираюсь показать вам здесь с помощью примеров (Найти сумму двух чисел).

Используя унарный оператор плюс

<!DOCTYPE html>
<html>
<body>

<H1>Program for sum of two numbers.</H1>
<p id="myId"></p>
<script>
var x = prompt("Please enter the first number.");//prompt will always return string value
var y = prompt("Please enter the second nubmer.");
var z = +x + +y;    
document.getElementById("myId").innerHTML ="Sum of "+x+" and "+y+" is "+z;
</script>
</body>
</html>

Используя синтаксический анализ approach-

<!DOCTYPE html>
<html>
<body>

<H1>Program for sum of two numbers.</H1>
<p id="myId"></p>
<script>
var x = prompt("Please enter the first number.");
var y = prompt("Please enter the second number.");   
var z = parseInt(x) + parseInt(y);
document.getElementById("myId").innerHTML ="Sum of "+x+" and "+y+" is "+z;
</script>
</body>
</html>

Ответ 13

Вы можете использовать parseInt для синтаксического анализа строки. Чтобы быть в безопасности, всегда передавайте 10 в качестве второго аргумента для анализа в базе 10.

num1 = parseInt(num1, 10);
num2 = parseInt(num2, 10);
alert(num1 + num2);

Ответ 14

Убедитесь, что вы округлили свой окончательный ответ до 16 знаков после запятой для поплавков, поскольку java script является ошибкой.

Например 5 - 7,6 = -2,5999999999999996

Ответ 15

Используйте метод parseFloat для синтаксического анализа строк в числах с плавающей запятой:

parseFloat(num1) + parseFloat(num2)

Ответ 16

Я использую это в своем проекте. Я использую знак + для обработки строки как числа (в переменной with_interesst)

<script>
function computeLoan(){
var amount = document.getElementById('amount').value;
var interest_rate = document.getElementById('interest_rate').value;
var days = document.getElementById('days').value;
var interest = (amount * (interest_rate * .01)) / days;
var payment = ((amount / days) + interest).toFixed(2);
var with_interest = (amount * (interest_rate * .01));
var with_interesst = (+amount * (interest_rate * .01)) + (+amount);
payment = payment.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
document.getElementById('payment').innerHTML = "Target Daily = PHP"+payment;
document.getElementById('with_interesst').innerHTML = "Amount w/Interest =   PHP"+with_interesst;
}
</script>

<div name="printchatbox" id="printchatbox">
 <form id="Calculate" class="form-horizontal">
   <h2>You Can Use This Calculator Before Submit </h2>
   <p>Loan Amount: PHP<input id="amount" type="number" min="1" max="1000000"  onchange="computeLoan()"></p>
   <p>Interest Rate: <input id="interest_rate" type="number" min="0" max="100" value="10" step=".1" onchange="computeLoan()">%</p>
    <p>Term<select id="days" type="number" min="1" max="72" step=".1" onchange="computeLoan()">
    <option value="40">40 Days</option>
    <option value="50">50 Days</option>
    <option value="60">60 Days</option>
    <option value="70">70 Days</option>
    <option value="80">80 Days</option>
    <option value="90">90 Days</option>
    <option value="100">100 Days</option>
    <option value="120">120 Days</option>
    </select>
    </p>                        
   <h2 id="payment"></h2>
   <h2 id ="with_interesst"></h2>
 </form>
</div>

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

Ответ 17

@cr05s19xx предложил по дублирующему вопросу:

JavaScript немного смешной, когда дело доходит до чисел и сложений.

Давать следующее

"20" - "30" = 10; //возвращает 10 как число '20' + '30' = '2030'; // Возвращает их в виде строки. Значения, возвращаемые из document.getElementById, являются строками, поэтому лучше проанализировать их все (даже те, которые работают) по нумерации, прежде чем продолжить сложение или вычитание. Ваш код может быть:

function myFunction() {
  var per = parseInt(document.getElementById('input1').value);
  var num = parseInt(document.getElementById('input2').value);
  var sum = (num / 100) * per;
  var output = num - sum;

  console.log(output);

  document.getElementById('demo').innerHTML = output;
}

function myFunction2() {
  var per = parseInt(document.getElementById('input3').value);
  var num = parseInt(document.getElementById('input4').value);
  var sum = (num / 100) * per;
  var output = sum + num;

  console.log(output);

  document.getElementById('demo1').innerHTML = output;
}

Ответ 18

document.getElementById(currentInputChoosen).value -= +-100;

Работает в моем случае, если вы столкнулись с той же проблемой, что и я, и не можете найти решение для этого случая и найти этот ТАК вопрос.

Извините за немного не по теме, но, как только я узнал, что это работает, я подумал, что стоит поделиться.

Не знаю, если это грязный обходной путь, или на самом деле законно.

Ответ 19

Вы можете использовать следующее:

var num1 = '20',
    num2 = '30.5';

alert((num1*1) + (num2*1)); //result 50.5

При применении * 1 в num1, преобразуйте строку в число.

если num1 содержит букву или запятую, возвращает NaN умножение на 1

если num1 имеет значение null, num1 возвращает 0

добро пожаловать!

Ответ 20

Попробуйте это, если вы ищете простой код Javascript и хотите использовать два поля ввода и добавить числа из двух значений. Вот код.

    Enter the first number: <input type="text" id="num1" /><br />
    Enter the seccond number: <input type="text" id="num2" /><br />
    <input type="button" onclick="call()" value="Add"/>

    <script type="text/javascript">
    function call(){
    var q=parseInt(document.getElementById("num1").value);
    var w=parseInt(document.getElementById("num2").value);
    var result=q+w;
    }
    </script>

Для более подробной информации посетите http://informativejavascript.blogspot.nl/2012/12/javascript-basics.html