我有两个字符串,其中只包含数字:

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

我本以为我可以把它们加在一起,但它们却被连接起来:

num1 + num2; // = '2030.5'

我如何才能迫使这些字符串被视为数字?


当前回答

在这里,你有两个选择:-

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>

其他回答

你可以这样用:

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

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

当在num1中应用*1时,将字符串转换为数字。

如果num1包含字母或逗号,则返回NaN乘以1

如果num1为空,num1返回0

亲切的问候! !

使用parseFloat(string)将字符串转换为浮点数或使用parseInt(string)将字符串转换为整数

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

在我的情况下,如果你遇到了和我一样的问题,却找不到解决方案,找到了这个SO问题。

抱歉有点跑题了,但我刚刚发现这是有效的,我想它可能值得分享。

不知道这是一个肮脏的变通办法,还是真的合法。

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

(+varname)

所以,在你的例子中是:

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

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

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

如果你需要把两个非常大的字符串加在一起,你需要在每个字符串位置计算加法:

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;
}