2012-01-23 17 views
125

मैं दो श्रृंखलाएं जिनमें केवल अंक होने है:दो तारों को कैसे जोड़ना है जैसे कि वे संख्याएं हैं?

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

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

num1 + num2; // = '2030.5' 

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

उत्तर

251

साथ integers को मैं एकल प्लस ऑपरेटर का उपयोग उन नंबरों के लिए पहले कन्वर्ट करने के लिए होगा।

+num1 + +num2; 
+8

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

+4

लेकिन यदि वे संख्या 2^53 से बड़ी हैं, तो आपको तारों के हिस्सों को जोड़ने और प्रत्येक भाग को ले जाने के लिए एक फ़ंक्शन बनाना होगा एक पाश में : डी – trusktr

+1

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

15

MDN docs for parseInt
MDN docs for parseFloat

parseInt मूलांक में दस के रूप में निर्दिष्ट किया जाता है, ताकि हम आधार से 10 nonstrict में जावास्क्रिप्ट एक नंबर 0 साथ prepended अष्टाधारी के रूप में व्यवहार किया जाता है में हैं। यह स्पष्ट रूप से समस्याएं पैदा करेगा!

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

इसके अलावा एक unary operator का उपयोग कर एक उपयोगी शॉर्टकट के लिए 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

+0

के रूप में निर्दिष्ट करना चाहिए और '+ num1 + + num2' छोटा, तर्कसंगत रूप से अधिक सुरुचिपूर्ण है। असल में यूनरी '+' ऑपरेटर 'संख्या' – Raynos

6

parseFloat(string) साथ floats को तार बदल सकते हैं या parseInt(string)

+1

या (यदि आप केवल पूर्णांक चाहते हैं) 'parseInt (स्ट्रिंग, 10) 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseInt –

0

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

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

उपयोग parseFloat विधि में पार्स करने के लिए चल बिन्दु संख्या में तार पार्स करने के लिए:

parseFloat(num1) + parseFloat(num2) 
2

कोशिश

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

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

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

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

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

और श्री Crockford उत्तम निबंध, Javascript: The World's Most Misunderstood Programming Language देखें।

9

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

(+varname) 

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

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

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

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

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

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

0

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

उदाहरण 5 के लिए - 7,6 = -2,5999999999999996

+1

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

4

आप संख्याओं को जोड़ने के लिए इसका उपयोग कर सकते हैं:

var x = +num1 + +num2; 
1

मैं हमेशा बस शून्य घटाया गया है।

num1-0 + num2-0; 

दी कि एकल ऑपरेटर विधि एक कम चरित्र है, लेकिन नहीं हर कोई जानता है कि क्या एक एकल ऑपरेटर है या कैसे जब वे नहीं जानते कि यह क्या कहा जाता है पता लगाने के लिए गूगल के लिए।

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

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

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

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

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

यदि संख्या 1 एक पत्र या एक अल्पविराम, रिटर्न NaN 1

से गुणा करता है, तो संख्या 1 रिक्त है, संख्या 1 रिटर्न 0

तरह का संबंध !!!

0

यदि आप स्ट्रिंग्स के रूप में संख्याओं के साथ संचालन करना चाहते हैं (जैसा कि 64 बिट्स से अधिक संख्याएं हो सकती हैं) तो आप big-integer लाइब्रेरी का उपयोग कर सकते हैं।

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

आप दो तार एक साथ जो बहुत बड़ी संख्या है कि आप हर स्ट्रिंग की स्थिति में इसके अलावा मूल्यांकन करने के लिए की आवश्यकता होगी रहे हैं जोड़ने के लिए की जरूरत है:

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

यह एक अच्छा जवाब है! – trusktr

संबंधित मुद्दे