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

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

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

num1 + num2; // = '2030.5'

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


当前回答

确保你的最终答案四舍五入小于16位小数浮点作为java脚本是错误的。

例如 5 - 7.6 = -2.5999999999999996

其他回答

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

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

可以使用parseInt将字符串解析为数字。为了安全起见,始终传递10作为以10为基数解析的第二个参数。

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

try

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

或者,根据你的需要:

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

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

你可能想读一下Douglas Crockford写的《Javascript: the Good Parts》这本书。Javascript有一个相当大的陷阱集合!这本书对澄清这些问题大有帮助。另请参阅

http://www.crockford.com/ http://javascript.crockford.com/

以及Crockford先生的优秀文章《Javascript:世界上最被误解的编程语言》。

我会先用一元加号运算符把它们转换成数字。

+num1 + +num2;

你可以这样用:

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

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

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

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

如果num1为空,num1返回0

亲切的问候! !