Làm thế nào để thêm hai chuỗi như thể chúng là số?


176

Tôi có hai chuỗi chỉ chứa số:

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

Tôi đã dự kiến ​​rằng tôi có thể thêm chúng lại với nhau, nhưng thay vào đó chúng đang được nối lại:

num1 + num2; // = '2030.5'

Làm thế nào tôi có thể buộc các chuỗi này được coi là số?

Câu trả lời:


378

Tôi sẽ sử dụng toán tử unary plus để chuyển đổi chúng thành số đầu tiên.

+num1 + +num2;

9
Rất tuyệt. Cảm ơn đã chia sẻ điều này. Tôi tìm thấy bài viết này mô tả toán tử cộng đơn nguyên và một số hữu ích ảnh hưởng đến nó trên các loại dữ liệu khác nhau. xkr.us/articles/javascript/unary-add
mrtsherman

4
Nhưng nếu những con số đó lớn hơn 2 ^ 53, bạn sẽ phải tạo một hàm để thêm các phần của chuỗi và mang phần mang đến từng phần trong một vòng lặp. : D
trusktr

2
Điều này đã cho tôi một lỗi, vì vậy tôi đã sử dụng parseFloat () để thay thế.
Hawkee

1
Xem thêm @NicholasCarey câu trả lời dưới đây: stackoverflow.com/a/8976770/1579667
Benj

Có một cách ít hacky để làm điều này? (Tuyên bố miễn trừ trách nhiệm: đây là cách tôi luôn làm.)
seebcakes

20

Tài liệu MDN cho tài liệu MDN parseInt
cho parseFloat

Trong parseInt radix được chỉ định là mười để chúng ta ở trong cơ sở 10. Trong javascript không giới hạn, một số được thêm vào 0được coi là bát phân. Điều này rõ ràng sẽ gây ra vấn đề!

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

Đồng thời xem câu trả lời của ChaosPandion cho một phím tắt hữu ích bằng cách sử dụng toán tử đơn nguyên . Tôi đã thiết lập một fiddle để hiển thị các hành vi khác nhau.

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
sử dụng parseFloat () nếu bạn có số thập phân. :)
Diodeus - James MacFarlane

1
Ngoài ra, bạn thực sự nên chỉ định cơ số là 10.
ChaosPandion

+num1 + +num2ngắn hơn, thanh lịch hơn. Về cơ bản toán tử đơn nguyên +chuyển đổi thànhNumber
Raynos

Bạn không mất số thập phân 0,5 khi bạn thực hiện parseInt?
DOK

Đối với những gì nó có giá trị, parseInt & parseFloat là thử nghiệm và không được hỗ trợ rộng rãi trên các trình duyệt - gần như không hỗ trợ trên thiết bị di động.
Sẽ

14

Tôi khuyên bạn nên sử dụng toán tử cộng đơn nguyên, để buộc một chuỗi cuối cùng được coi là số, bên trong dấu ngoặc đơn để làm cho mã dễ đọc hơn như sau:

(+varname)

Vì vậy, trong trường hợp của bạn, đó là:

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

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

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



6

Nếu bạn cần thêm hai chuỗi với nhau với số lượng rất lớn, bạn sẽ cần đánh giá bổ sung ở mọi vị trí chuỗi:

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


4

thử

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

hoặc, tùy thuộc vào nhu cầu của bạn:

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

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

Bạn có thể muốn chọn cuốn sách Javascript: The Good Parts , của Douglas Crockford. Javascript có một colleciton khá lớn của gotchas! Cuốn sách này đi một chặng đường dài để làm rõ chúng. Xem thêm

và bài tiểu luận xuất sắc của ông Crockford, Javascript: Ngôn ngữ lập trình sai lầm nhất thế giới .


3

Tôi luôn luôn trừ không.

num1-0 + num2-0;

Được cho rằng phương thức toán tử đơn nguyên là một ký tự ít hơn, nhưng không phải ai cũng biết toán tử đơn nguyên là gì hoặc làm thế nào để google tìm ra khi họ không biết nó được gọi là gì.


2

Nếu bạn muốn thực hiện thao tác với các số dưới dạng chuỗi (như trong trường hợp số lớn hơn 64 bit có thể giữ), bạn có thể sử dụng thư viện số nguyên lớn .

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

2

Tại đây, bạn có hai lựa chọn để làm điều này: -

1.Bạn có thể sử dụng dấu cộng đơn để chuyển đổi số chuỗi thành số nguyên.

2.Bạn cũng có thể đạt được điều này thông qua phân tích số thành loại tương ứng. tức là parseInt (), parseFloat () vv

.

Bây giờ tôi sẽ chỉ cho bạn ở đây với sự giúp đỡ của các ví dụ (Tìm tổng của hai số).

Sử dụng toán tử unary plus

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

Sử dụng phương pháp phân tích cú pháp-

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

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

1

Bạn có thể sử dụng parseIntđể phân tích một chuỗi thành một số. Để ở bên an toàn của mọi thứ, luôn luôn vượt qua 10như đối số thứ hai để phân tích cú pháp trong cơ sở 10.

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

1

Hãy chắc chắn rằng bạn làm tròn câu trả lời cuối cùng của bạn xuống dưới 16 chữ số thập phân cho số float vì tập lệnh java bị lỗi.

Ví dụ 5 - 7.6 = -2.5999999999999996


1
JavaScript không có lỗi, nó sử dụng cùng một điểm nổi IEEE754 như hầu hết mọi thứ khác. Sự thiếu chính xác mà bạn lưu ý là hậu quả tự nhiên của việc sử dụng số học dấu phẩy động nhị phân trên các số mà bạn chỉ định và hiển thị dưới dạng thập phân.
Michael Geary

1

@ cr05s19xx đề xuất về một câu hỏi trùng lặp:

JavaScript là một chút buồn cười khi nói đến số và bổ sung.

Đưa ra những điều sau đây

'20' - '30' = 10; // trả về 10 dưới dạng số '20' + '30' = '2030'; // Trả về chúng dưới dạng chuỗi Các giá trị được trả về từ document.getEuityById là các chuỗi, vì vậy tốt hơn là phân tích tất cả chúng (ngay cả chuỗi hoạt động) thành số, trước khi tiếp tục cộng hoặc trừ. Mã của bạn có thể là:

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

0

Sử dụng parseFloatphương pháp để phân tích các chuỗi thành các số dấu phẩy động:

parseFloat(num1) + parseFloat(num2)

0

Tôi sử dụng điều này trong dự án của mình. Tôi sử dụng dấu + để coi chuỗi là một số (trong biến 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>

Hy vọng nó giúp


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

Hoạt động trong trường hợp của tôi, nếu bạn gặp phải vấn đề tương tự như tôi và không thể tìm ra giải pháp cho trường hợp đó và tìm câu hỏi SO này.

Xin lỗi vì một chút lạc đề, nhưng khi tôi phát hiện ra rằng điều này hoạt động, tôi nghĩ rằng nó có thể đáng để chia sẻ.

Không biết đó là một cách giải quyết bẩn thỉu, hay thực sự hợp pháp.


-1

Bạn có thể sử dụng như thế này:

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

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

Khi áp dụng * 1 trong num1, chuyển đổi chuỗi số.

nếu num1 chứa một chữ cái hoặc dấu phẩy, trả về NaN nhân với 1

nếu num1 là null, num1 trả về 0

Trân trọng!!!


-2

Hãy thử điều này nếu bạn đang tìm kiếm mã Javascript đơn giản và muốn sử dụng hai hộp nhập liệu và thêm số từ hai giá trị. Đây là mã.

    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>

để biết thêm chi tiết, vui lòng truy cập http://informativejavascript.blogspot.nl/2012/12/javascript-basics.html

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.