javascript - मैं एक स्ट्रिंग को जावास्क्रिप्ट में एक पूर्णांक में कैसे परिवर्तित करूं?




string integer (14)

मैं एक string को जावास्क्रिप्ट में एक integer में कैसे परिवर्तित करूं?


Google ने मुझे यह जवाब परिणाम के रूप में दिया, इसलिए ...

सी और जावास्क्रिप्ट के बीच बाध्यकारी के लिए, मुझे वास्तव में एक स्ट्रिंग को "पूर्ण" करने की आवश्यकता होती है, इसलिए मैं स्ट्रिंग को एक पूर्णांक मान में परिवर्तित करता हूं:

/*
    Examples:
        int2str( str2int("test") ) == "test" // true
        int2str( str2int("t€st") ) // "t¬st", because "€".charCodeAt(0) is 8364, will be AND'ed with 0xff
    Limitations:
        max 4 chars, so it fits into an integer
*/
function str2int(the_str) {
    var ret = 0;
    var len = the_str.length;
    if (len >= 1) ret += (the_str.charCodeAt(0) & 0xff) <<  0;
    if (len >= 2) ret += (the_str.charCodeAt(1) & 0xff) <<  8;
    if (len >= 3) ret += (the_str.charCodeAt(2) & 0xff) << 16;
    if (len >= 4) ret += (the_str.charCodeAt(3) & 0xff) << 24;
    return ret;
}
function int2str(the_int) {
    var tmp = [
        (the_int & 0x000000ff) >>  0,
        (the_int & 0x0000ff00) >>  8,
        (the_int & 0x00ff0000) >> 16,
        (the_int & 0xff000000) >> 24
    ];
    var ret = "";
    for (var i=0; i<4; i++) {
        if (tmp[i] == 0)
            break;
        ret += String.fromCharCode(tmp[i]);
    }
    return ret;
}

ParseInt () और + अलग हैं

parseInt("10.3456") // returns 10

+"10.3456" // returns 10.3456

ParseInt फ़ंक्शन का प्रयास करें:

var number = parseInt("10");

लेकिन एक समस्या है। यदि आप parseInt फ़ंक्शन का उपयोग करके "010" को कन्वर्ट करने का प्रयास करते हैं, तो यह ऑक्टल नंबर के रूप में पता लगाता है, और नंबर 8 लौटाएगा। इसलिए, आपको रेडिक्स निर्दिष्ट करना होगा (2 से 36 तक)। इस मामले में आधार 10।

parseInt(string, radix)

उदाहरण:

var result = parseInt("010", 10) == 10; // Returns true

var result = parseInt("010") == 10; // Returns false

इसके अलावा एक साइड नोट के रूप में: Mootools में INT () का फ़ंक्शन होता है जिसका उपयोग किसी देशी स्ट्रिंग (या फ्लोट (या पूर्णांक) पर किया जाता है)।

"2".toInt()   // 2
"2px".toInt() // 2
2.toInt()     // 2

एक और विकल्प एक्सओआर को अपने साथ मूल्य दोगुना करना है:

var i = 12.34;
console.log('i = ' + i);
console.log('i ⊕ i ⊕ i = ' + (i ^ i ^ i));

यह आउटपुट होगा:

i = 12.34
i ⊕ i ⊕ i = 12

एक स्ट्रिंग को एक संख्या मूल्य में बदलने के लिए जावास्क्रिप्ट में कई तरीके हैं ... सभी सरल और आसान, जिस तरीके से आपके लिए काम करता है उसे चुनें:

var num = Number("999.5"); //999.5
var num = parseInt("999.5", 10); //999
var num = parseFloat("999.5"); //999.5
var num = +"999.5"; //999.5

इसके अलावा कोई भी गणित ऑपरेशन उन्हें संख्या में बदल देता है, उदाहरण के लिए ...

var num = "999.5" / 1; //999.5
var num = "999.5" * 1; //999.5
var num = "999.5" - 1 + 1; //999.5
var num = "999.5" - 0; //999.5
var num = Math.floor("999.5"); //999
var num = ~~"999.5"; //999

मेरा पसंदीदा तरीका + चिह्न का उपयोग कर रहा है, जो जावास्क्रिप्ट में स्ट्रिंग को संख्या में परिवर्तित करने का शानदार तरीका है।


देशी Number फ़ंक्शन का उपयोग करने का सबसे आसान तरीका होगा:

var x = Number("1000")

यदि यह आपके लिए काम नहीं करता है, तो वहाँ parseInt , यूनरी प्लस , फर्श के साथ parseFloat , और Math.round विधियों हैं।

parseInt:

var x = parseInt("1000", 10); // you want to use radix 10
    // so you get a decimal number even with a leading 0 and an old browser ([IE8, Firefox 20, Chrome 22 and older][1])

यूनरी प्लस यदि आपकी स्ट्रिंग पहले से ही पूर्णांक के रूप में है:

var x = +"1000";

यदि आपकी स्ट्रिंग एक फ्लोट है या हो सकता है और आप एक पूर्णांक चाहते हैं:

var x = Math.floor("1000.01"); //floor automatically converts string to number

या, यदि आप कई बार Math.floor का उपयोग करने जा रहे हैं:

var floor = Math.floor;
var x = floor("1000.01");

यदि आप ऐसे प्रकार हैं जो रेडिक्स को पर्सिंट को कॉल करते समय भूल जाते हैं, तो आप पार्सफ्लैट का उपयोग कर सकते हैं और इसे पसंद करते हैं। यहां मैं मंजिल का उपयोग करता हूं।

var floor = Math.floor;
var x = floor(parseFloat("1000.01"));

दिलचस्प बात यह है कि, Math.round (Math.floor की तरह) संख्या रूपांतरण के लिए एक स्ट्रिंग करेगा, इसलिए यदि आप गोलाकार संख्या चाहते हैं (या यदि आपके पास स्ट्रिंग में पूर्णांक है), यह एक शानदार तरीका है, शायद मेरा पसंदीदा:

var round = Math.round;
var x = round("1000"); //equivalent to round("1000",0)

मेरी राय में, कोई जवाब सभी किनारे के मामलों को कवर नहीं करता है क्योंकि एक फ्लोट को पार्स करने के परिणामस्वरूप त्रुटि होनी चाहिए।

function parseInteger(value) {
    if(value === '') return NaN;
    const number = Number(value);
    return Number.isInteger(number) ? number : NaN;
}
parseInteger("4")            // 4
parseInteger("5aaa")         // NaN
parseInteger("4.33333")      // NaN
parseInteger("aaa");         // NaN

मैंने यहां गलत जवाब पोस्ट किया, क्षमा करें। तय की।

यह एक पुराना सवाल है, लेकिन मुझे यह चाल पसंद है:

~~"2.123"; //2
~~"5"; //5

दशमलव बिंदु के बाद डबल बिटवाई नकारात्मक नकारात्मक बंद हो जाता है और इसे एक प्रारूप में परिवर्तित करता है। मुझे बताया गया है कि यह कॉलिंग कार्यों और क्या नहीं है, लेकिन मैं पूरी तरह से आश्वस्त नहीं हूं।

संपादित करें: मैंने अभी एक और तरीका देखा here (जावास्क्रिप्ट >>> ऑपरेटर के बारे में एक प्रश्न, जो एक शून्य-भरने वाली सही शिफ्ट है) जो दिखाता है कि इस ऑपरेटर के साथ 0 से संख्या को स्थानांतरित करने से संख्या को यूंट 32 में बदल दिया जाता है जो कि अच्छा है यह भी हस्ताक्षर करना चाहते हैं। दोबारा, यह एक हस्ताक्षरित पूर्णांक में परिवर्तित हो जाता है, जो कि यदि आप एक हस्ताक्षरित संख्या का उपयोग करते हैं तो अजीब व्यवहार कर सकते हैं।

"-2.123" >>> 0; // 4294967294
"2.123" >>> 0; // 2
"-5" >>> 0; // 4294967291
"5" >>> 0; // 5

यहां गति की छोटी तुलना है (केवल मैक ओएस) ... :)

क्रोम 'प्लस' और 'मुल' के लिए सबसे तेज़, 'Math.floor' सबसे धीमा है (> 700,000,00 सेशन / सेकंड)। फ़ायरफ़ॉक्स 'प्लस' के लिए सबसे धीमा (!) 'मुल' सबसे तेज़ है (> 900,000,000 सेशन / सेकंड)। सफारी 'parseInt' में उपवास है, 'संख्या' सबसे धीमी है (लेकिन resulats काफी समान हैं,> 13,000,000 <31,000,000)। इसलिए कास्ट स्ट्रिंग के लिए सफारी अन्य ब्राउज़रों की तुलना में 10x से अधिक धीमी है। तो विजेता ' मुल ' है :)

आप इस लिंक https://jsperf.com/casttonumber द्वारा अपने ब्राउज़र पर इसे चला सकते हैं


स्ट्रिंग को जावास्क्रिप्ट में किसी संख्या में कनवर्ट करने के दो मुख्य तरीके हैं। एक तरीका यह है कि इसे पार्स करना और दूसरा तरीका अपने प्रकार को किसी संख्या में बदलना है। अन्य उत्तरों (जैसे यूनरी प्लस) में सभी चालें स्ट्रिंग के प्रकार को एक संख्या में मजबूती से जोड़ती हैं। आप संख्या फ़ंक्शन के साथ स्पष्ट रूप से वही काम भी कर सकते हैं।

पदच्छेद

var parsed = parseInt("97", 10);

parseInt और parseFloat दो कार्य हैं जो संख्याओं को तारों को पार्स करने के लिए उपयोग किए जाते हैं। पार्सिंग चुपचाप रुक जाएगी यदि यह उस चरित्र को हिट करता है जिसे यह पहचान नहीं पाता है, जो "92 पीएक्स" जैसे तारों को पार्स करने के लिए उपयोगी हो सकता है, लेकिन यह कुछ हद तक खतरनाक भी है, क्योंकि इससे आपको खराब इनपुट पर कोई त्रुटि नहीं मिलेगी, इसके बजाय आप जब तक स्ट्रिंग एक संख्या से शुरू नहीं हो जाती तब तक NaN वापस आ जाएगी। स्ट्रिंग की शुरुआत में व्हाइटस्पेस को नजरअंदाज कर दिया जाता है। यहां आप जो चाहते हैं उससे कुछ अलग करने का एक उदाहरण यहां दिया गया है, और कोई संकेत नहीं दिया कि कुछ भी गलत हो गया है:

var widgetsSold = parseInt("97,800", 10); // widgetsSold is now 97

रेडिक्स को दूसरे तर्क के रूप में हमेशा निर्दिष्ट करना अच्छा अभ्यास है। पुराने ब्राउज़र में, यदि स्ट्रिंग 0 से शुरू होती है, तो रेडिक्स निर्दिष्ट नहीं किया गया था, तो इसे अष्टक के रूप में व्याख्या किया जाएगा, जिसमें बहुत से लोग आश्चर्यचकित हुए। हेक्साडेसिमल के लिए व्यवहार 0x के साथ स्ट्रिंग प्रारंभ करके ट्रिगर किया जाता है यदि कोई रेडिक्स निर्दिष्ट नहीं है, उदाहरण के लिए 0xff । मानक वास्तव में ecmascript 5 के साथ बदल गया है, इसलिए आधुनिक ब्राउज़र अब अंडाकार ट्रिगर नहीं करते हैं जब कोई रेडिक्स निर्दिष्ट नहीं किया गया है तो एक अग्रणी 0 है। parseInt आधार 36 तक रेडिक्स को समझता है, इस मामले में ऊपरी और निचले केस अक्षरों को बराबर माना जाता है।

एक संख्या में एक स्ट्रिंग के प्रकार को बदलना

उपरोक्त वर्णित सभी अन्य युक्तियां जो parseInt का उपयोग नहीं करती हैं, में स्ट्रिंग को एक संख्या में मजबूती से शामिल करना शामिल है। मैं इसे स्पष्ट रूप से करना पसंद करता हूं,

var cast = Number("97");

इस पर पार्स विधियों के लिए अलग-अलग व्यवहार हैं (हालांकि यह अभी भी व्हाइटस्पेस को अनदेखा करता है)। यह अधिक सख्त है: यदि यह पूरे स्ट्रिंग को NaN लौटने की तुलना में समझ में नहीं आता है, तो आप इसे 97px जैसे तारों के लिए उपयोग नहीं कर सकते हैं। चूंकि आप संख्या रैपर ऑब्जेक्ट की बजाय एक आदिम संख्या चाहते हैं, इसलिए सुनिश्चित करें कि आप संख्या फ़ंक्शन के सामने new नहीं डालते हैं।

जाहिर है, किसी संख्या में कनवर्ट करने से आपको एक मान मिलता है जो एक पूर्णांक की बजाय एक फ्लोट हो सकता है, इसलिए यदि आप एक पूर्णांक चाहते हैं, तो आपको इसे संशोधित करने की आवश्यकता है। ऐसा करने के कुछ तरीके हैं:

var rounded = Math.floor(Number("97.654"));  // other options are Math.ceil, Math.round
var fixed = Number("97.654").toFixed(0); // rounded rather than truncated
var bitwised = Number("97.654")|0;  // do not use for large numbers

किसी भी bitwise ऑपरेटर (यहां मैंने थोड़ा सा किया है या, लेकिन आप पहले के जवाब में या बिट्सफ़्ट के रूप में डबल नकारात्मक भी कर सकते हैं) मान को 32 बिट पूर्णांक में परिवर्तित कर देगा, और उनमें से अधिकतर एक हस्ताक्षरित पूर्णांक में परिवर्तित हो जाएंगे। ध्यान दें कि यह नहीं होगा कि आप बड़े पूर्णांक के लिए चाहते हैं । यदि पूर्णांक 32 बिट्स में प्रदर्शित नहीं किया जा सकता है, तो यह लपेट जाएगा।

~~"3000000000.654" === -1294967296
// This is the same as
Number("3000000000.654")|0
"3000000000.654" >>> 0 === 3000000000 // unsigned right shift gives you an extra bit
"300000000000.654" >>> 0 === 3647256576 // but still fails with larger numbers

बड़ी संख्याओं के साथ सही तरीके से काम करने के लिए, आपको गोल करने के तरीकों का उपयोग करना चाहिए

Math.floor("3000000000.654") === 3000000000
// This is the same as
Math.floor(Number("3000000000.654"))

ध्यान रखें कि इन सभी विधियों में घातीय नोटेशन को समझते हैं, इसलिए 2e2 NaN की बजाय 200 । इसके अलावा, संख्या "इन्फिनिटी" को समझती है, जबकि पार्स विधियां नहीं होती हैं।

रिवाज

यह असंभव है कि इनमें से कोई भी तरीका बिल्कुल वही करता है जो आप चाहते हैं। उदाहरण के लिए, आमतौर पर अगर पार्सिंग विफल हो जाती है तो मुझे एक त्रुटि फेंकना पड़ेगा, और मुझे इन्फिनिटी, घातीय या अग्रणी व्हाइटस्पेस के लिए समर्थन की आवश्यकता नहीं है। आपके उपयोगकेस के आधार पर, कभी-कभी कस्टम रूपांतरण फ़ंक्शन लिखना समझ में आता है।

हमेशा जांचें कि संख्या या पार्स विधियों में से एक आउटपुट आपके द्वारा अपेक्षित संख्या का प्रकार है। आप निश्चित रूप से यह सुनिश्चित करने के लिए isNaN का उपयोग करना चाहते हैं कि संख्या NaN नहीं है (आमतौर पर एकमात्र तरीका जिसे आप पार्स विफल करते हैं)।


हम parseInt(stringOfNumber) का उपयोग करने के बजाय +(stringOfNumber) उपयोग कर सकते हैं

पूर्व: +("21") 21 के parseInt("21")

हम फ्लोटिंग पार्सिंग के लिए इस यूनरी "+" ऑपरेटर का भी उपयोग कर सकते हैं ...


string को number बदलने के लिए str - 0 आज़माएं।

> str = '0'
> str - 0
  0
> str = '123'
> str - 0
  123
> str = '-12'
> str - 0
  -12
> str = 'asdf'
> str - 0
  NaN
> str = '12.34'
> str - 0
  12.34

स्ट्रिंग को int में कनवर्ट करने के कई तरीकों के प्रदर्शन की तुलना करने के लिए यहां दो लिंक दिए गए हैं

https://jsperf.com/number-vs-parseint-vs-plus

http://phrogz.net/js/string_to_number.html


function doSth(){
  var a = document.getElementById('input').value;
  document.getElementById('number')
  .innerHTML = toNumber(a) + 1;
}
function toNumber(str){
  return +str;
}
<input id="input" type="text">
<input onclick="doSth()" type="submit">
<span id="number"></span>






parseint