दो स्ट्रिंग्स को कैसे जोड़ा जाए जैसे कि वे संख्याएं थीं?


176

मेरे दो तार हैं जिनमें केवल संख्याएँ हैं:

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

मुझे उम्मीद थी कि मैं उन्हें एक साथ जोड़ सकता हूं, लेकिन उन्हें बदले में दिया जा रहा है:

num1 + num2; // = '2030.5'

मैं इन तारों को संख्याओं के रूप में व्यवहार करने के लिए कैसे मजबूर कर सकता हूं?

जवाबों:


378

मैं उन्हें पहले नंबरों में बदलने के लिए यूनीरी प्लस ऑपरेटर का उपयोग करूंगा।

+num1 + +num2;

9
बहुत ही शांत। इसे साझा करने के लिए धन्यवाद। मुझे यह लेख मिला, जो यूनीरी प्लस ऑपरेटर के बारे में बताता है और इसके कुछ उपयोगी प्रभाव विभिन्न डेटा प्रकारों पर है। xkr.us/articles/javascript/unary-add
mrtsherman

4
लेकिन अगर वे संख्या 2 ^ 53 से बड़ी हैं, तो आपको स्ट्रिंग्स के कुछ हिस्सों को जोड़ने के लिए एक फंक्शन बनाना होगा और लूप में प्रत्येक हिस्से पर कैरी करना होगा। : D
trusktr

2
इससे मुझे एक त्रुटि मिली, इसलिए मैंने इसके बजाय parseFloat () का उपयोग किया।
हकीकी

1
: @NicholasCarey जवाब नीचे भी देखें stackoverflow.com/a/8976770/1579667
Benj

क्या ऐसा करने के लिए कम हैक करने का तरीका है? (डिस्क्लेमर: यह है कि मैं हमेशा यह कैसे कर रहा हूं।)
सिसकी

20

ParseFloat के लिए MDN डॉक्स parseInt के लिए
MDN डॉक्स

ParseInt में मूलांक दस के रूप में निर्दिष्ट किया गया है ताकि हम आधार १० में हों। नॉनट्रेक्ट जावास्क्रिप्ट में एक संख्या जो पहले से बताई 0गई है, को ऑक्टल माना जाता है। यह स्पष्ट रूप से समस्याओं का कारण होगा!

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

इसके अलावा एक का उपयोग कर एक उपयोगी शॉर्टकट के लिए ChaosPandion का जवाब देखने के एकल ऑपरेटर । मैंने अलग-अलग व्यवहार दिखाने के लिए एक फिडेल स्थापित किया है।

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
यदि आपको दशमलव मिल गया है, तो parseFloat () का उपयोग करें। :)
डायोडस - जेम्स मैकफर्लेन

1
इसके अलावा आपको वास्तव में मूलांक 10. को निर्दिष्ट करना चाहिए
ChaosPandion

और +num1 + +num2छोटा है, यकीनन अधिक सुरुचिपूर्ण है। मूल रूप से +Number
एकरी

जब आप parseInt करते हैं तो आप .5 दशमलव नहीं खोते हैं?
डीओके

इसके लायक क्या है, parseInt और parseFloat प्रयोगात्मक हैं और व्यापक रूप से ब्राउज़र में समर्थित नहीं हैं - मोबाइल पर लगभग कोई समर्थन नहीं है।
विल

14

मैं यूनिरी प्लस ऑपरेटर का उपयोग करने की सलाह दूंगा, जिससे कि कोड के रूप में इलाज किया जा सके एक तात्कालिक स्ट्रिंग के लिए, कोष्ठक के अंदर कोड को निम्नलिखित की तरह अधिक पठनीय बनाने के लिए:

(+varname)

तो, आपके मामले में यह है:

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

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

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



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


4

प्रयत्न

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

या, अपनी आवश्यकताओं पर निर्भर करता है:

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

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

आप डगलस क्रॉकफोर्ड की पुस्तक जावास्क्रिप्ट: द गुड पार्ट्स को चुनना चाह सकते हैं । जावास्क्रिप्ट में गोचैस की जगह बहुत बड़ा कोलेज़िटॉन होता है! यह पुस्तक उन्हें स्पष्ट करने की दिशा में एक लंबा रास्ता तय करती है। यह सभी देखें

और मिस्टर क्रॉकफोर्ड का उत्कृष्ट निबंध, जावास्क्रिप्ट: द वर्ल्ड्स मोस्ट मिंडरस्टूड प्रोग्रामिंग लैंग्वेज


3

मैंने हमेशा शून्य को घटाया है।

num1-0 + num2-0;

यह माना जाता है कि एकरी संचालक विधि एक कम वर्ण है, लेकिन हर कोई नहीं जानता है कि एक अपर संचालक क्या है या यह कैसे पता करें कि यह क्या है, यह पता नहीं है।


2

यदि आप स्ट्रिंग्स के रूप में संख्याओं के साथ ऑपरेशन करना चाहते हैं (जैसा कि उस स्थिति में जहां संख्याएं 64 बिट्स से बड़ी हैं, तो आप बड़े-पूर्णांक लाइब्रेरी का उपयोग कर सकते हैं ।

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

2

यहाँ, आपके पास ऐसा करने के लिए दो विकल्प हैं: -

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>

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

आप parseIntएक स्ट्रिंग को एक नंबर पर पार्स करने के लिए उपयोग कर सकते हैं । चीजों के सुरक्षित पक्ष पर होने के लिए, हमेशा 10आधार 10 में पार्स करने के लिए दूसरे तर्क के रूप में पास करें ।

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

1

सुनिश्चित करें कि आप अपने अंतिम उत्तर को फ़्लोट के लिए 16 से कम दशमलव स्थानों पर गोल करें क्योंकि जावा स्क्रिप्ट छोटी गाड़ी है।

उदाहरण के लिए 5 - 7.6 = -2.5999999999999996


1
जावास्क्रिप्ट छोटी गाड़ी नहीं है, यह उसी IEEE754 फ़्लोटिंग पॉइंट का उपयोग करता है जैसे कि सब कुछ। आपके द्वारा नोट की गई अपव्यय बाइनरी फ़्लोटिंग पॉइंट अंकगणित का उपयोग उन संख्याओं पर एक स्वाभाविक परिणाम है जो आप दशमलव में निर्दिष्ट और प्रदर्शित करते हैं।
माइकल गेरी 4

1

@ cr05s19xx ने डुप्लिकेट प्रश्न पर सुझाव दिया:

जब संख्या और जोड़ की बात आती है, तो जावास्क्रिप्ट थोड़ा मजाकिया होता है।

निम्नलिखित देते हुए

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

0

parseFloatफ़्लोटिंग पॉइंट संख्याओं में स्ट्रिंग्स को पार्स करने के लिए विधि का उपयोग करें :

parseFloat(num1) + parseFloat(num2)

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>

आशा करता हूँ की ये काम करेगा


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

मेरे मामले में काम करता है, यदि आप मेरे जैसी ही समस्या में हैं और उस मामले का कोई हल नहीं ढूंढ सकते हैं और इस SO प्रश्न का पता लगाएं।

थोड़े से ऑफ-टॉपिक के लिए क्षमा करें, लेकिन जैसा कि मुझे पता चला कि यह काम करता है, मुझे लगा कि यह साझा करने के लायक हो सकता है।

पता नहीं कि यह एक गंदा काम है, या वास्तव में कानूनी है।


-1

आप इस तरह का उपयोग कर सकते हैं:

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

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

जब अंक 1 में 1 * लागू करें, स्ट्रिंग को एक संख्या में परिवर्तित करें।

यदि अंक 1 में कोई अक्षर या अल्पविराम होता है, तो NaN को 1 से गुणा करता है

अगर num1 शून्य है, num1 0 है

सधन्यवाद!!!


-2

यदि आप सरल जावास्क्रिप्ट कोड की तलाश कर रहे हैं तो यह कोशिश करें और दो इनपुट बॉक्स का उपयोग करें और दो मान से संख्याओं को जोड़ें। यहाँ कोड है।

    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>

अधिक जानकारी के लिए कृपया देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.