কিভাবে বাইনারি স্ট্রিং দশমিক রূপান্তর?


100

আমি বাইনারি স্ট্রিংকে ডিজিট ডিম্বায় রূপান্তর করতে চাই

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

কিভাবে এটা সম্ভব? ধন্যবাদ

উত্তর:


196

parseIntফাংশন নম্বরে স্ট্রিং পরিবর্তিত, এবং এটি বেস যা স্ট্রিং উপস্থাপনা উল্লেখ একটি দ্বিতীয় আর্গুমেন্ট গ্রহণ করা:

var digit = parseInt(binary, 2);

এটি কর্মে দেখুন


4
এটি কি এখনও প্রাসঙ্গিক? parseInt(101, 2)আয় 5
srph

13
@ এসআরএফ: এটি আশ্চর্যজনক নয়, 101 বেস 2 তে 5 বেস 10
জোন

4
আহ আমি দেখি. আমি অবশ্যই ভুল বুঝেছি parseInt। আমি ভেবেছিলাম এটি স্ট্রিংটি বেস 10 থেকে> রূপান্তরিত করবে - যাই হোক না কেন (যেমন চিন্তা করা parseInt('5612', 2)তার বাইনারি ফর্মটি ফিরিয়ে দেবে;)।
এসআরএফ

21

ES6 পূর্ণসংখ্যার জন্য বাইনারি সংখ্যাসূচক অক্ষরগুলিকে সমর্থন করে , সুতরাং যদি বাইনারি স্ট্রিংটি অপরিবর্তনীয় থাকে তবে প্রশ্নের উদাহরণ কোড অনুসারে, কেউ এটি উপসর্গের সাথে যেমন টাইপ করতে পারে 0bবা 0B:

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

12

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>

এফওয়াইআই: আপনি যদি 2 ডি হেক্স নম্বর হিসাবে পাস করতে চান তবে আপনাকে এটি স্ট্রিং হিসাবে প্রেরণ করতে হবে যাতে এটি এরকম হয়: 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}).`);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.