如何添加两个字符串就好像它们是数字一样?

And*_*rew 159 javascript

我有两个只包含数字的字符串:

var num1 = '20',
    num2 = '30.5';
Run Code Online (Sandbox Code Playgroud)

我原本以为我可以将它们加在一起,但它们正在被连接起来:

num1 + num2; // = '2030.5'
Run Code Online (Sandbox Code Playgroud)

如何强制将这些字符串视为数字?

Cha*_*ion 339

我会使用一元加运算符将它们首先转换为数字.

+num1 + +num2;
Run Code Online (Sandbox Code Playgroud)

  • 很酷.谢谢你分享这个.我发现这篇文章描述了一元加运算符以及它对不同数据类型的一些有用影响.http://xkr.us/articles/javascript/unary-add/ (8认同)
  • 但是如果这些数字大于2 ^ 53,你将不得不创建一个函数来添加部分字符串并将循环传递给每个部分.:d (4认同)
  • 这给了我一个错误,所以我改用了parseFloat()。 (2认同)

mrt*_*man 20

用于parseFloat的parseInt
MDN文档的MDN文档

在parseInt中,radix被指定为10,因此我们在10中.在nonstrict javascript中,前面加上的数字0被视为八进制.这显然会导致问题!

parseInt(num1, 10) + parseInt(num2, 10) //base10
parseFloat(num1) + parseFloat(num2)
Run Code Online (Sandbox Code Playgroud)

另请参阅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'));
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你有小数,请使用parseFloat().:) (2认同)

Luc*_*one 13

我建议使用一元加运算符,强制将最终字符串视为数字,在括号内,使代码更具可读性,如下所示:

(+varname)
Run Code Online (Sandbox Code Playgroud)

所以,在你的情况下,它是:

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

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

// Just to test it
console.log( sum ); // 50.5
Run Code Online (Sandbox Code Playgroud)


und*_*ned 12

var result = Number(num1) + Number(num2);
Run Code Online (Sandbox Code Playgroud)


Kri*_*ian 7

的字符串转换为floatsparseFloat(string)integersparseInt(string)


kug*_*sha 6

如果你需要将两个非常大的数字串一起添加,你需要在每个字符串位置评估加法:

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;
}
Run Code Online (Sandbox Code Playgroud)


Gur*_*ngh 5

您可以使用它来添加数字:

var x = +num1 + +num2;
Run Code Online (Sandbox Code Playgroud)