Как добавить две строки, как если бы они были числами? - PullRequest
152 голосов
/ 23 января 2012

У меня есть две строки, которые содержат только цифры:

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

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

num1 + num2; // = '2030.5'

Как можноЯ заставляю эти строки рассматриваться как числа?

Ответы [ 20 ]

321 голосов
/ 23 января 2012

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

+num1 + +num2;
19 голосов
/ 23 января 2012

MDN документы для parseInt MDN документы для 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'));
}
13 голосов
/ 23 января 2012

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

(+varname)

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

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

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

// Just to test it
console.log( sum ); // 50.5
12 голосов
/ 23 января 2012
var result = Number(num1) + Number(num2);
7 голосов
/ 23 января 2012

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

5 голосов
/ 24 января 2014

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

var x = +num1 + +num2;
5 голосов
/ 08 января 2018

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

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;
}
3 голосов
/ 24 января 2014

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

num1-0 + num2-0;

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

3 голосов
/ 23 января 2012

1001 * попробовать *

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

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

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

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

Возможно, вы захотите взять книгу Дагласа Крокфорда Javascript: The Good Parts . Javascript имеет довольно значительную коллекцию ошибок! Эта книга имеет большое значение для их разъяснения. Смотри также

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

2 голосов
/ 07 октября 2018

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

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>

Использование подхода синтаксического анализа-

<!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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...