Bagaimana cara menambahkan dua string seolah-olah itu angka?

176

Saya memiliki dua string yang hanya berisi angka:

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

Saya berharap bahwa saya bisa menambahkan mereka bersama-sama, tetapi mereka sedang disatukan:

num1 + num2; // = '2030.5'

Bagaimana saya bisa memaksa string ini diperlakukan sebagai angka?

Andrew
sumber

Jawaban:

378

Saya akan menggunakan operator plus unary untuk mengubahnya menjadi angka terlebih dahulu.

+num1 + +num2;
Kekacauan Kekacauan
sumber
9
Sangat keren. Terima kasih telah berbagi ini. Saya menemukan artikel ini yang menggambarkan operator plus unary dan beberapa efek yang berpengaruh terhadap berbagai tipe data. xkr.us/articles/javascript/unary-add
mrtsherman
4
Tetapi jika angka-angka itu lebih besar dari 2 ^ 53, Anda harus membuat fungsi untuk menambahkan bagian-bagian dari string dan membawa carry ke setiap bagian dalam satu lingkaran. : D
trusktr
2
Ini memberi saya kesalahan, jadi saya menggunakan parseFloat () sebagai gantinya.
Hawkee
1
Lihat juga @NicholasCarey jawaban di bawah ini: stackoverflow.com/a/8976770/1579667
Benj
Apakah ada cara yang kurang ceroboh untuk melakukan ini? (Penafian: inilah yang selalu saya lakukan.)
seebiscuit
20

Dokumen MDN untuk parseInt
Dokumen MDN untuk parseFloat

Dalam parseInt radix ditetapkan sebagai sepuluh sehingga kita berada di basis 10. Dalam javascript nonstrik, angka yang diawali dengan 0diperlakukan sebagai oktal. Ini jelas akan menyebabkan masalah!

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

Juga lihat jawaban ChaosPandion untuk pintasan yang bermanfaat menggunakan operator unary . Saya telah membuat biola untuk menunjukkan perilaku yang berbeda.

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'));
}
mrtsherman
sumber
2
gunakan parseFloat () jika Anda memiliki desimal. :)
Diodeus - James MacFarlane
1
Anda juga harus menentukan radix sebagai 10.
ChaosPandion
Dan +num1 + +num2lebih pendek, bisa dibilang lebih elegan. Pada dasarnya +operator unary dikonversi keNumber
Raynos
Apakah Anda tidak kehilangan .5 desimal ketika Anda melakukan parseInt?
DOK
Untuk apa nilainya, parseInt & parseFloat bersifat eksperimental dan tidak didukung secara luas di seluruh browser - hampir tidak ada dukungan di seluler.
Will
14

Saya akan merekomendasikan untuk menggunakan operator plus unary, untuk memaksa string akhirnya diperlakukan sebagai angka, di dalam tanda kurung untuk membuat kode lebih mudah dibaca seperti berikut:

(+varname)

Jadi, dalam kasus Anda:

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

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

// Just to test it
console.log( sum ); // 50.5
Luca Borrione
sumber
12
var result = Number(num1) + Number(num2);
tidak terdefinisi
sumber
6

Jika Anda perlu menambahkan dua string bersamaan yang jumlahnya sangat besar, Anda perlu mengevaluasi penambahan pada setiap posisi string:

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;
}
Kugyousha
sumber
5

Anda dapat menggunakan ini untuk menambahkan nomor:

var x = +num1 + +num2;
Gurwinder Singh
sumber
4

mencoba

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

atau, tergantung pada kebutuhan Anda:

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

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

Anda mungkin ingin mengambil buku Javascript: The Good Parts , oleh Douglas Crockford. Javascript memiliki koleksi gotcha yang cukup besar! Buku ini jauh menuju klarifikasi mereka. Lihat juga

dan esai luar biasa Mr. Crockford, Javascript: Bahasa Pemrograman yang Paling Banyak Disalahpahami di Dunia .

Nicholas Carey
sumber
3

Saya selalu mengurangi nol.

num1-0 + num2-0;

Memang metode operator unary adalah satu karakter kurang, tetapi tidak semua orang tahu apa operator unary atau bagaimana mencari tahu google ketika mereka tidak tahu apa namanya.

adam0101
sumber
2

Jika Anda ingin melakukan operasi dengan angka sebagai string (seperti dalam kasus di mana angka lebih besar dari 64bits bisa tahan) Anda dapat menggunakan perpustakaan bilangan bulat besar .

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

Di sini, Anda memiliki dua opsi untuk melakukan ini: -

1.Anda dapat menggunakan unary plus untuk mengubah nomor string menjadi integer.

2. Anda juga dapat mencapai ini melalui penguraian nomor ke dalam tipe yang sesuai. yaitu parseInt (), parseFloat () dll

.

Sekarang saya akan menunjukkan kepada Anda di sini dengan bantuan contoh (Temukan jumlah dari dua angka).

Menggunakan operator plus unary

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

Menggunakan pendekatan parsing-

<!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>
Brajesh
sumber
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 ;
}
Soham Das
sumber
1

Anda bisa menggunakan parseIntuntuk mengurai string ke angka. Agar aman dari segala hal, selalu sampaikan 10argumen kedua untuk menguraikan dalam basis 10.

num1 = parseInt(num1, 10);
num2 = parseInt(num2, 10);
alert(num1 + num2);
Alex Turpin
sumber
1

Pastikan Anda melengkapi jawaban akhir Anda menjadi kurang dari 16 tempat desimal untuk pelampung karena skrip java bermasalah.

Misalnya 5 - 7.6 = -2.5999999999999996

Nicolas
sumber
1
JavaScript bukan buggy, ia menggunakan floating point IEEE754 yang sama seperti kebanyakan hal lainnya. Ketidaktepatan yang Anda catat adalah konsekuensi alami dari penggunaan aritmatika titik mengambang biner pada angka yang Anda tentukan dan tampilkan dalam desimal.
Michael Geary
1

@ cr05s19xx menyarankan pada pertanyaan duplikat:

JavaScript agak lucu dalam hal angka dan penambahan.

Memberi yang berikut ini

'20' - '30' = 10; // mengembalikan 10 sebagai angka '20' + '30' = '2030'; // Mengembalikannya sebagai string. Nilai yang dikembalikan dari document.getElementById adalah string, jadi lebih baik untuk menguraikan semuanya (bahkan yang berfungsi) ke angka, sebelum melanjutkan dengan penambahan atau pengurangan. Kode Anda dapat:

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;
}
Gary
sumber
0

Gunakan parseFloatmetode untuk mengurai string menjadi angka floating point:

parseFloat(num1) + parseFloat(num2)
Guffa
sumber
0

Saya menggunakan ini dalam proyek saya. Saya menggunakan tanda + untuk memperlakukan string sebagai angka (dalam variabel 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>

Semoga ini bisa membantu


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

Bekerja dalam kasus saya, jika Anda mengalami masalah yang sama seperti saya dan tidak dapat menemukan solusi untuk kasus itu dan menemukan pertanyaan SO ini.

Maaf untuk sedikit di luar topik, tetapi karena saya baru tahu bahwa ini berfungsi, saya pikir mungkin layak untuk dibagikan.

Tidak tahu apakah ini solusi kotor, atau benar-benar sah.

Roma
sumber
-1

Anda dapat menggunakan seperti ini:

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

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

Ketika menerapkan * 1 dalam num1, konversikan angka.

jika num1 berisi huruf atau koma, kembalikan NaN dikalikan dengan 1

jika num1 adalah nol, num1 mengembalikan 0

Salam!!!

Seconddj
sumber
-2

Coba ini jika Anda mencari kode Javascript sederhana dan ingin menggunakan dua kotak input dan menambahkan angka dari dua nilai. Ini kodenya.

    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>

untuk lebih jelasnya silakan kunjungi http://informativejavascript.blogspot.nl/2012/12/javascript-basics.html

kamal
sumber