İki dizeyi sayıymış gibi nasıl ekleyebilirim?


176

Sadece sayı içeren iki dizesi var:

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

Bunları birlikte ekleyebilirdim, ama bunun yerine bitiştiriliyor:

num1 + num2; // = '2030.5'

Bu karakter dizilerini sayı olarak ele almaya nasıl zorlayabilirim?

Yanıtlar:


378

Onları önce sayılara dönüştürmek için tekli artı operatörünü kullanırdım.

+num1 + +num2;

9
Çok havalı. Bunu paylaştığın için teşekkürler. Tekli artı işleci ve bunun farklı veri türleri üzerindeki bazı yararlı etkilerini açıklayan bu makaleyi buldum. xkr.us/articles/javascript/unary-add
mrtsherman

4
Ancak bu sayılar 2 ^ 53'den büyükse, dizelerin parçalarını eklemek ve bir döngüdeki her parçaya taşımak için bir işlev oluşturmanız gerekir. : D
trusktr

2
Bu bana bir hata verdi, bu yüzden bunun yerine parseFloat () kullandım.
Hawkee

1
@NicholasCarey cevap aşağıda Ayrıca bakınız: stackoverflow.com/a/8976770/1579667
Benj

Bunu yapmanın daha az hileli bir yolu var mı? (Feragatname: Ben her zaman böyle yapıyorum.)
seebiscuit

20

Parse için MDN belgeleri ParseFloat için
MDN belgeleri

ParseInt yarıçapında on olarak belirtilir, böylece taban 10'dayız 0. Bu elbette sorunlara yol açacaktır!

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

Ayrıca, tekli bir operatör kullanarak yararlı bir kısayol için ChaosPandion'un cevabına bakın . Farklı davranışları göstermek için bir keman kurdum.

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
ondalık basamaklarınız varsa parseFloat () kullanın. :)
Diodeus - James MacFarlane

1
Ayrıca
yarıçapı

Ve +num1 + +num2daha kısa, tartışmasız daha zarif. Temel olarak, tekli +operatörNumber
Raynos

ParseInt yaptığınızda .5 ondalık işareti kaybetmez misiniz?
DOK

Değeri ne olursa olsun, parseInt & parseFloat deneyseldir ve tarayıcılarda yaygın olarak desteklenmez - mobil cihazlarda neredeyse hiç destek yoktur.
Will

14

Kodun aşağıdaki gibi daha okunabilir hale getirilmesi için parantez içinde sayı olarak ele alınacak bir dizeyi zorlamak için tekli artı operatörünün kullanılmasını tavsiye ederim:

(+varname)

Yani, sizin durumunuzda:

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

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

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



6

Çok büyük sayılar olan iki dizeyi birlikte eklemeniz gerekiyorsa, eklemeyi her dize konumunda değerlendirmeniz gerekir:

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

Deneyin

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

veya ihtiyaçlarınıza bağlı olarak:

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

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

Douglas Crockford'un Javascript: The Good Parts adlı kitabını almak isteyebilirsiniz . Javascript oldukça büyük bir gotchas koleksiyonuna sahiptir! Bu kitap onları açıklığa kavuşturmak için uzun bir yol kat ediyor. Ayrıca bakınız

ve Bay Crockford'un mükemmel denemesi Javascript: Dünyanın En Yanlış Anlaşılan Programlama Dili .


3

Ben her zaman sıfır çıkardım.

num1-0 + num2-0;

Tekli operatör yönteminin bir tane daha az karakter olduğu, ancak herkesin bir tekli operatörün ne olduğunu veya ne denir bilmediğini öğrenmek için google'ın nasıl kullanılacağını bilmediği kabul edildi.


2

Sayılarla dize olarak işlem yapmak istiyorsanız (sayıların 64 bit'ten büyük olduğu durumlarda olduğu gibi) büyük tamsayı kitaplığını kullanabilirsiniz.

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

2

Burada, bunu yapmak için iki seçeneğiniz vardır: -

1. dize numarasını tamsayıya dönüştürmek için tekli artı kullanabilirsiniz.

2.Bunu, numarayı ilgili türe ayrıştırarak da yapabilirsiniz. yani parseInt (), parseFloat () vb.

.

Şimdi burada size örnekler yardımıyla göstereceğim (İki sayının toplamını bulun).

Unary plus operatörünü kullanma

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

Ayrıştırma yaklaşımını kullanma

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

parseIntBir dizeyi sayıya ayrıştırmak için kullanabilirsiniz . Nesnelerin güvenli tarafında olmak için, her zaman 10taban 10'da ayrıştırmak için ikinci argüman olarak geçin.

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

1

Java komut dosyası buggy olduğundan, son cevabınızı float için 16 ondalık basamağa yuvarladığınızdan emin olun.

Örneğin 5 - 7,6 = -2,5999999999999996


1
JavaScript buggy değil, diğer her şeyle aynı IEEE754 kayan noktayı kullanıyor. Belirttiğiniz kesinsizlik, ondalık olarak belirlediğiniz ve görüntülediğiniz sayılar üzerinde ikili kayan nokta aritmetiği kullanmanın doğal bir sonucudur.
Michael Geary

1

@ cr05s19xx, yinelenen bir soru üzerine önerildi:

Sayılar ve toplama söz konusu olduğunda JavaScript biraz komik.

Aşağıdakileri vermek

'20' - '30' = 10; // 10'u '20' + '30' = '2030' olarak döndürür; // Onları dize olarak döndürür document.getElementById öğesinden döndürülen değerler dizedir, bu nedenle toplama veya çıkarma işlemine devam etmeden önce hepsini (işe yarayanı bile) ayrıştırmak daha iyidir. Kodunuz şunlar olabilir:

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

parseFloatDizeleri kayan nokta sayılarına ayrıştırmak için yöntemi kullanın :

parseFloat(num1) + parseFloat(num2)

0

Projemde bunu kullanıyorum. Dizeyi sayı olarak ele almak için + işaretini kullanıyorum (with_interesst değişkeninde)

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

Umarım yardımcı olur


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

Benim durumumda çalışır, benim gibi aynı problemle karşılaşırsanız ve bu dava için bir çözüm bulamazsanız ve bu SO sorusunu bulabilirseniz.

Biraz konu dışı için özür dilerim, ama sadece bu işe yaradığını öğrendiğim gibi, paylaşmaya değer olabileceğini düşündüm.

Kirli bir geçici çözüm mü yoksa yasal mı bilmiyorum.


-1

Bunun gibi kullanabilirsiniz:

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

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

Num1'de * 1 uyguladığınızda, dizeyi bir sayıya dönüştürün.

num1 bir harf veya virgül içeriyorsa, NaN değerini 1 ile çarparak döndürür

num1 boşsa, num1 0 değerini döndürür

Saygılarımla!!!


-2

Basit Javascript kodu arıyorsanız ve iki giriş kutusu kullanmak ve iki değerden sayılar eklemek istiyorsanız bunu deneyin. İşte kod.

    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>

daha fazla bilgi için lütfen http://informativejavascript.blogspot.nl/2012/12/javascript-basics.html adresini ziyaret edin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.