【问题标题】:How to add two strings as if they were numbers? [duplicate]如何添加两个字符串,就好像它们是数字一样? [复制]
【发布时间】:2023-03-14 22:00:01
【问题描述】:

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

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

我原以为我可以将它们加在一起,但它们被串联起来了:

num1 + num2; // = '2030.5'

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

【问题讨论】:

    标签: javascript


    【解决方案1】:

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

    +num1 + +num2;
    

    【讨论】:

    • 非常酷。谢谢你分享这个。我发现这篇文章描述了一元加号运算符以及它对不同数据类型的一些有用影响。 xkr.us/articles/javascript/unary-add
    • 但如果这些数字大于 2^53,您将不得不创建一个函数来添加部分字符串并将结转到循环中的每个部分。 :D
    • 这给了我一个错误,所以我使用了 parseFloat() 代替。
    • 另请参阅下面的@NicholasCarey 答案:stackoverflow.com/a/8976770/1579667
    • 有没有更简单的方法来做到这一点? (免责声明:这就是我一直以来的做法。)
    【解决方案2】:

    MDN docs for parseInt
    MDN docs for parseFloat

    在 parseInt 中,基数被指定为 10,因此我们以 10 为底。在非严格 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'));
    }
    

    【讨论】:

    • 如果您有小数,请使用 parseFloat()。 :)
    • 另外你真的应该将基数指定为 10。
    • +num1 + +num2 更短,可以说更优雅。基本上一元 + 运算符转换为 Number
    • 您在执行 parseInt 时不会丢失小数点 0.5 吗?
    • 值得一提的是,parseInt 和 parseFloat 是实验性的,并未在浏览器中得到广泛支持——在移动设备上几乎不支持。
    【解决方案3】:

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

    (+varname)
    

    所以,在你的情况下是:

    var num1 = '20',
        num2 = '30.5';
    
    var sum = (+num1) + (+num2);
    
    // Just to test it
    console.log( sum ); // 50.5
    

    【讨论】:

      【解决方案4】:
      var result = Number(num1) + Number(num2);
      

      【讨论】:

        【解决方案5】:

        使用parseFloat(string) 将字符串转换为floats 或使用parseInt(string) 转换为integers

        【讨论】:

        【解决方案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;
        }
        

        【讨论】:

          【解决方案7】:

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

          var x = +num1 + +num2;
          

          【讨论】:

            【解决方案8】:

            试试

            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 有相当多的陷阱!这本书在澄清它们方面走了很长一段路。另请参阅

            还有 Crockford 先生的优秀论文,Javascript: The World's Most Misunderstood Programming Language

            【讨论】:

              【解决方案9】:

              我总是只减去零。

              num1-0 + num2-0;
              

              当然,一元运算符方法少了一个字符,但并不是每个人都知道一元运算符是什么,或者当他们不知道它叫什么时如何谷歌查找。

              【讨论】:

                【解决方案10】:
                function sum(){
                    var x,y,z;
                    x = Number(document.getElementById("input1").value);
                    y = Number(document.getElementById("input2").value);
                    z = x + y;
                    document.getElementById("result").innerHTML = z ;
                }
                

                【讨论】:

                  【解决方案11】:

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

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

                  【讨论】:

                    【解决方案12】:

                    在这里,您有两种选择:-

                    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>
                    

                    【讨论】:

                      【解决方案13】:

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

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

                      【讨论】:

                        【解决方案14】:

                        请确保将最终答案四舍五入到小数点后 16 位以下,因为 java 脚本有问题。

                        例如 5 - 7.6 = -2.5999999999999996

                        【讨论】:

                        • JavaScript 没有错误,它使用与大多数其他东西相同的 IEEE754 浮点数。您注意到的不精确性是对您指定并以十进制显示的数字使用二进制浮点运算的自然结果。
                        【解决方案15】:

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

                        【讨论】:

                          【解决方案16】:

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

                          parseFloat(num1) + parseFloat(num2)
                          

                          【讨论】:

                            【解决方案17】:

                            我在我的项目中使用它。我使用 + 号将字符串视为数字(在 with_interest 变量中)

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

                            希望对你有帮助

                            【讨论】:

                              【解决方案18】:
                              document.getElementById(currentInputChoosen).value -= +-100;
                              

                              适用于我的情况,如果您遇到和我一样的问题并且找不到该情况的解决方案并找到这个 SO 问题。

                              对不起,有点跑题了,但我刚刚发现这可行,我认为它可能值得分享。

                              不知道这是否是一个肮脏的解决方法,或者实际上是合法的。

                              【讨论】:

                                【解决方案19】:

                                你可以这样使用:

                                var num1 = '20',
                                    num2 = '30.5';
                                
                                alert((num1*1) + (num2*1)); //result 50.5
                                

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

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

                                如果 num1 为 null,则 num1 返回 0

                                亲切的问候!!!

                                【讨论】:

                                  【解决方案20】:

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

                                  【讨论】:

                                    猜你喜欢
                                    • 1970-01-01
                                    • 2022-11-25
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 2021-08-02
                                    • 2014-08-04
                                    相关资源
                                    最近更新 更多