बाइनरी स्ट्रिंग को दशमलव में कैसे बदलें?


100

मैं बाइनरी स्ट्रिंग को डिजिट ईजी में बदलना चाहता हूं

var binary = "1101000" // code for 104
var digit = binary.toString(10); // Convert String or Digit (But it does not work !)
console.log(digit);

यह कैसे संभव है? धन्यवाद

जवाबों:


195

parseIntसमारोह संख्या के तार बदल देता है, और यह स्थान है जहाँ में स्ट्रिंग प्रतिनिधित्व है निर्दिष्ट करने के लिए एक दूसरा तर्क लेता है:

var digit = parseInt(binary, 2);

इसे कार्रवाई में देखें


1
क्या यह अभी भी प्रासंगिक है? parseInt(101, 2)लौटता है 5
एसआरएफ

13
@ एसआरएफ: यह आश्चर्य की बात नहीं है, बेस 2 में 101 बेस 5 में 5 है
जॉन

3
ओह समझा। मुझे गलतफहमी हुई होगी कि क्या parseInt। मैंने सोचा था कि यह स्ट्रिंग को आधार 10 से बदल देगा -> जो कुछ भी (जैसे सोच parseInt('5612', 2)अपने द्विआधारी रूप को लौटाएगा;)।
एसआर

21

ES6 पूर्णांक के लिए द्विआधारी संख्यात्मक शाब्दिक का समर्थन करता है , इसलिए यदि द्विआधारी स्ट्रिंग अपरिवर्तनीय है, जैसा कि प्रश्न में उदाहरण कोड में है, तो कोई इसे केवल उसी प्रकार लिख सकता है जैसे यह उपसर्ग 0bया 0B:

var binary = 0b1101000; // code for 104
console.log(binary); // prints 104

12

parseInt() मूलांक के साथ एक सबसे अच्छा समाधान है (जैसा कि कई लोगों द्वारा बताया गया था):

लेकिन अगर आप इसे parseInt के बिना लागू करना चाहते हैं, तो यहां एक कार्यान्वयन है:

  function bin2dec(num){
    return num.split('').reverse().reduce(function(x, y, i){
      return (y === '1') ? x + Math.pow(2, i) : x;
    }, 0);
  }



3
        var num = 10;

        alert("Binary " + num.toString(2));   //1010
        alert("Octal " + num.toString(8));    //12
        alert("Hex " + num.toString(16));     //a

        alert("Binary to Decimal "+ parseInt("1010", 2));  //10
        alert("Octal to Decimal " + parseInt("12", 8));    //10
        alert("Hex to Decimal " + parseInt("a", 16));      //10

2

मैंने उन सभी को इकट्ठा किया जो दूसरों ने सुझाए हैं और निम्नलिखित फ़ंक्शन बनाए हैं जिसमें 3 तर्क हैं, वह संख्या और आधार जो उस संख्या से आया है और वह आधार जो उस नंबर पर होने वाला है:

changeBase(1101000, 2, 10) => 104

इसे स्वयं आज़माने के लिए कोड स्निपेट चलाएँ:

function changeBase(number, fromBase, toBase) {
                        if (fromBase == 10)
                            return (parseInt(number)).toString(toBase)
                        else if (toBase == 10)
                            return parseInt(number, fromBase);
                        else{
                            var numberInDecimal = parseInt(number, fromBase);
                            return (parseInt(numberInDecimal)).toString(toBase);
                    }
}

$("#btnConvert").click(function(){
  var number = $("#txtNumber").val(),
  fromBase = $("#txtFromBase").val(),
  toBase = $("#txtToBase").val();
  $("#lblResult").text(changeBase(number, fromBase, toBase));
});
#lblResult{
  padding: 20px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="txtNumber" type="text" placeholder="Number" />
<input id="txtFromBase" type="text" placeholder="From Base" />
<input id="txtToBase" type="text" placeholder="To Base" />
<input id="btnConvert" type="button" value="Convert" />
<span id="lblResult"></span>

<p>Hint: <br />
Try 110, 2, 10 and it will return 6; (110)<sub>2</sub> = 6<br />

or 2d, 16, 10 => 45 meaning: (2d)<sub>16</sub> = 45<br />
or 45, 10, 16 => 2d meaning: 45 = (2d)<sub>16</sub><br />
or 2d, 2, 16 => 2d meaning: (101101)<sub>2</sub> = (2d)<sub>16</sub><br />
</p>

FYI करें: यदि आप 2d को हेक्स संख्या के रूप में पास करना चाहते हैं, तो आपको इसे एक स्ट्रिंग के रूप में भेजने की आवश्यकता है, इसलिए यह इस प्रकार है: changeBase('2d', 16, 10)


फ्लोटिंग पॉइंट नंबरों को हैंडल नहीं करता है। 3.14159265,10,16 3 देता है
मार्क मैनिंग

1

कार्यात्मक जेएस अभ्यास के लिए सिर्फ एक और कार्यान्वयन हो सकता है

var bin2int = s => Array.prototype.reduce.call(s, (p,c) => p*2 + +c)
console.log(bin2int("101010"));
जहां +ccoerces Stringटाइप cएक करने के लिए Numberउचित इसके लिए प्रकार मान।


0

कुछ और ES6 सिंटैक्स और ऑटो-विशेषताओं का उपयोग करते हुए पारंपरिक रूप से संशोधित बाइनरी रूपांतरण एल्गोरिथ्म:

  1. बाइनरी अनुक्रम स्ट्रिंग को ऐरे में परिवर्तित करें (यह मानते हुए कि यह पहले से ही सरणी के रूप में पारित हो गया है)

  2. रिवर्स अनुक्रम को 0-इंडेक्स को दाएं-बाइनरी अंक पर शुरू करने के लिए बाध्य करने के लिए क्योंकि बाइनरी को दाएं-बाएं गणना की जाती है

  3. 'कम करें' एरियर फ़ंक्शन ट्रैवर्स को सरणी देता है, बाइनरी अंक के प्रति (2 ^ इंडेक्स) के समतुल्य प्रदर्शन [केवल अगर बाइनरी अंक === 1] (0 अंक हमेशा 0 उपज देता है)

नोट: बाइनरी रूपांतरण सूत्र:

{जहां d = बाइनरी अंक, i = सरणी इंडेक्स, n = सरणी लंबाई -1 (दाएं से शुरू)}

n
* (d * 2 ^ i)
i = 0

let decimal = Array.from(binaryString).reverse().reduce((total, val, index)=>val==="1"?total + 2**index:total, 0);  

console.log(`Converted BINARY sequence (${binaryString}) to DECIMAL (${decimal}).`);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.