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

时间:2012-01-23 18:24:32

标签: javascript

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

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

我原本以为我可以将它们加在一起,但它们正在联合起来:

num1 + num2; // = '2030.5'

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

20 个答案:

答案 0 :(得分:319)

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

+num1 + +num2;

答案 1 :(得分:18)

MDN docs for parseInt
MDN docs for parseFloat

在parseInt中,radix被指定为10,因此我们在10中。在nonstrict javascript中,以0为前缀的数字被视为八进制。这显然会引起问题!

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

另请参阅ChaosPandion使用unary operator获取有用快捷方式的答案。我已经设置了一个小提琴来展示不同的行为。

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

答案 2 :(得分:13)

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

(+varname)

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

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

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

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

答案 3 :(得分:12)

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

答案 4 :(得分:7)

使用floats将字符串转换为parseFloat(string)或使用integersparseInt(string)转换为<{1}}

答案 5 :(得分:5)

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

var x = +num1 + +num2;

答案 6 :(得分: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;
}

答案 7 :(得分:3)

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有一个相当大的陷阱集合!这本书在澄清它们方面有很长的路要走。另见

和克罗克福德先生的优秀论文,Javascript: The World's Most Misunderstood Programming Language

答案 8 :(得分:3)

我总是只减去零。

num1-0 + num2-0;

当然,一元算子方法是一个较少的字符,但不是每个人都知道一元算子是什么或如何谷歌找出他们什么时候不知道它叫什么。

答案 9 :(得分:2)

如果要使用数字作为字符串执行操作(如数字大于64位的情况可以容纳),则可以使用big-integer库。

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

答案 10 :(得分:2)

$emit('update:prop-name-in-kebab-case

答案 11 :(得分:1)

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

例如 5 - 7.6 = -2.5999999999999996

答案 12 :(得分:1)

您可以使用parseInt将字符串解析为数字。为了安全起见,总是将10作为第二个参数传递给基数10进行解析。

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

答案 13 :(得分:1)

在这里,您有两个选择可以做到这一点:-

  

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>

答案 14 :(得分:0)

使用parseFloat方法将字符串解析为浮点数:

parseFloat(num1) + parseFloat(num2)

答案 15 :(得分:0)

我在我的项目中使用它。我使用+符号将字符串视为数字(在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>

希望有所帮助

答案 16 :(得分:0)

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

答案 17 :(得分:0)

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

在我的情况下有效,如果遇到像我一样的问题,而找不到该情况的解决方案并找到此问题。

对不起,我的观点有点偏离主题,但是正如我刚刚发现的那样,我认为值得分享。

不知道这是一个肮脏的解决方法,还是真正的合法性。

答案 18 :(得分:-1)

您可以这样使用:

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

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

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

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

如果num1为null,则num1返回0

亲切的问候!!!

答案 19 :(得分:-2)

如果您正在寻找简单的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