Convert decimal fraction to binary number - GeeksforGeeks

01 Jun, 2021
Given a fraction decimal number n and integer k, convert decimal number n into equivalent binary number up-to k precision after decimal point. Examples:  
Input: n = 2.47, k = 5
Output: 10.01111

Input: n = 6.986 k = 8
Output: 110.11111100
 
A) Convert the integral part of decimal to binary equivalent  
Divide the decimal number by 2 and store remainders in array. Divide the quotient by 2. Repeat step 2 until we get the quotient equal to zero.Equivalent binary number would be reverse of all remainders of step 1.
Divide the decimal number by 2 and store remainders in array. 
Divide the quotient by 2. 
Repeat step 2 until we get the quotient equal to zero.
Equivalent binary number would be reverse of all remainders of step 1.
B) Convert the fractional part of decimal to binary equivalent  
Multiply the fractional decimal number by 2. Integral part of resultant decimal number will be first digit of fraction binary number. Repeat step 1 using only fractional part of decimal number and then step 2.  
Multiply the fractional decimal number by 2. 
Integral part of resultant decimal number will be first digit of fraction binary number. 
Repeat step 1 using only fractional part of decimal number and then step 2.  
C) Combine both integral and fractional part of binary number.Illustration  
Let's take an example for n = 4.47 k = 3

Step 1: Conversion of 4 to binary
1. 4/2 : Remainder = 0 : Quotient = 2
2. 2/2 : Remainder = 0 : Quotient = 1
3. 1/2 : Remainder = 1 : Quotient = 0

So equivalent binary of integral part of decimal is 100.

Step 2: Conversion of .47 to binary
1. 0.47 * 2 = 0.94, Integral part: 0
2. 0.94 * 2 = 1.88, Integral part: 1
3. 0.88 * 2 = 1.76, Integral part: 1

So equivalent binary of fractional part of decimal is .011

Step 3: Combined the result of step 1 and 2.

Final answer can be written as:
100 + .011 = 100.011
Program to demonstrate above steps:  
C++
Java
Python3
C#
PHP
Javascript
// C++ program to convert fractional decimal// to binary number#include<bits/stdc++.h>using namespace std; // Function to convert decimal to binary upto// k-precision after decimal pointstring decimalToBinary(double num, int k_prec){    string binary = "";     // Fetch the integral part of decimal number    int Integral = num;     // Fetch the fractional part decimal number    double fractional = num - Integral;     // Conversion of integral part to    // binary equivalent    while (Integral)    {        int rem = Integral % 2;         // Append 0 in binary        binary.push_back(rem +'0');         Integral /= 2;    }     // Reverse string to get original binary    // equivalent    reverse(binary.begin(),binary.end());     // Append point before conversion of    // fractional part    binary.push_back('.');     // Conversion of fractional part to    // binary equivalent    while (k_prec--)    {        // Find next bit in fraction        fractional *= 2;        int fract_bit = fractional;         if (fract_bit == 1)        {            fractional -= fract_bit;            binary.push_back(1 + '0');        }        else            binary.push_back(0 + '0');    }     return binary;} // Driver codeint main(){     double n = 4.47;    int k = 3;    cout << decimalToBinary(n, k) << "\n";     n = 6.986 , k = 5;    cout << decimalToBinary(n, k);    return 0;}
// Java program to convert fractional decimal// to binary numberimport java.util.*; class GFG{     // Function to convert decimal to binary upto    // k-precision after decimal point    static String decimalToBinary(double num, int k_prec)    {        String binary = "";         // Fetch the integral part of decimal number        int Integral = (int) num;         // Fetch the fractional part decimal number        double fractional = num - Integral;         // Conversion of integral part to        // binary equivalent        while (Integral > 0)        {            int rem = Integral % 2;             // Append 0 in binary            binary += ((char)(rem + '0'));             Integral /= 2;        }         // Reverse string to get original binary        // equivalent        binary = reverse(binary);         // Append point before conversion of        // fractional part        binary += ('.');         // Conversion of fractional part to        // binary equivalent        while (k_prec-- > 0)        {            // Find next bit in fraction            fractional *= 2;            int fract_bit = (int) fractional;             if (fract_bit == 1)            {                fractional -= fract_bit;                binary += (char)(1 + '0');            }            else            {                binary += (char)(0 + '0');            }        }         return binary;    }     static String reverse(String input)    {        char[] temparray = input.toCharArray();        int left, right = 0;        right = temparray.length - 1;         for (left = 0; left < right; left++, right--)        {            // Swap values of left and right            char temp = temparray[left];            temparray[left] = temparray[right];            temparray[right] = temp;        }        return String.valueOf(temparray);    }     // Driver code    public static void main(String[] args)    {        double n = 4.47;        int k = 3;        System.out.println(decimalToBinary(n, k));         n = 6.986;        k = 5;        System.out.println(decimalToBinary(n, k));    }} // This code contributed by Rajput-Ji
# Python3 program to convert fractional# decimal to binary number # Function to convert decimal to binary# upto k-precision after decimal pointdef decimalToBinary(num, k_prec) :     binary = ""     # Fetch the integral part of    # decimal number    Integral = int(num)     # Fetch the fractional part    # decimal number    fractional = num - Integral     # Conversion of integral part to    # binary equivalent    while (Integral) :                 rem = Integral % 2         # Append 0 in binary        binary += str(rem);         Integral //= 2         # Reverse string to get original    # binary equivalent    binary = binary[ : : -1]     # Append point before conversion    # of fractional part    binary += '.'     # Conversion of fractional part    # to binary equivalent    while (k_prec) :                 # Find next bit in fraction        fractional *= 2        fract_bit = int(fractional)         if (fract_bit == 1) :                         fractional -= fract_bit            binary += '1'                     else :            binary += '0'         k_prec -= 1     return binary # Driver codeif __name__ == "__main__" :         n = 4.47    k = 3    print(decimalToBinary(n, k))     n = 6.986    k = 5    print(decimalToBinary(n, k)) # This code is contributed by Ryuga
// C# program to convert fractional decimal// to binary numberusing System; class GFG{      // Function to convert decimal to binary upto    // k-precision after decimal point    static String decimalToBinary(double num, int k_prec)    {        String binary = "";          // Fetch the integral part of decimal number        int Integral = (int) num;          // Fetch the fractional part decimal number        double fractional = num - Integral;          // Conversion of integral part to        // binary equivalent        while (Integral > 0)        {            int rem = Integral % 2;              // Append 0 in binary            binary += ((char)(rem + '0'));              Integral /= 2;        }          // Reverse string to get original binary        // equivalent        binary = reverse(binary);          // Append point before conversion of        // fractional part        binary += ('.');          // Conversion of fractional part to        // binary equivalent        while (k_prec-- > 0)        {            // Find next bit in fraction            fractional *= 2;            int fract_bit = (int) fractional;              if (fract_bit == 1)            {                fractional -= fract_bit;                binary += (char)(1 + '0');            }            else            {                binary += (char)(0 + '0');            }        }          return binary;    }      static String reverse(String input)    {        char[] temparray = input.ToCharArray();        int left, right = 0;        right = temparray.Length - 1;          for (left = 0; left < right; left++, right--)        {            // Swap values of left and right            char temp = temparray[left];            temparray[left] = temparray[right];            temparray[right] = temp;        }        return String.Join("",temparray);    }      // Driver code    public static void Main(String[] args)    {        double n = 4.47;        int k = 3;        Console.WriteLine(decimalToBinary(n, k));          n = 6.986;        k = 5;        Console.WriteLine(decimalToBinary(n, k));    }} // This code has been contributed by 29AjayKumar
<?php// PHP program to convert fractional decimal// to binary number // Function to convert decimal to binary upto// k-precision after decimal pointfunction decimalToBinary($num, $k_prec){    $binary = "";     // Fetch the integral part of decimal number    $Integral = (int)($num);     // Fetch the fractional part decimal number    $fractional = $num - $Integral;     // Conversion of integral part to    // binary equivalent    while ($Integral)    {        $rem = $Integral % 2;         // Append 0 in binary        $binary.=chr($rem + 48 );         $Integral = (int)($Integral/2);    }     // Reverse string to get original binary    // equivalent    $binary=strrev($binary);     // Append point before conversion of    // fractional part    $binary.='.';     // Conversion of fractional part to    // binary equivalent    while ($k_prec--)    {        // Find next bit in fraction        $fractional *= 2;        $fract_bit = (int)$fractional;         if ($fract_bit == 1)        {            $fractional -= $fract_bit;            $binary.=chr(1 + 48 );        }        else            $binary.=chr(0 + 48 );    }     return $binary;} // Driver code     $n = 4.47;    $k = 3;    echo decimalToBinary($n, $k)."\n";     $n = 6.986;    $k = 5;    echo decimalToBinary($n, $k);     // This code is contributed by mits?>
<script>     // JavaScript program to convert fractional    // decimal to binary number         // Function to convert decimal to binary upto    // k-precision after decimal point    function decimalToBinary(num, k_prec)    {        let binary = "";            // Fetch the integral part of decimal number        let Integral = parseInt(num, 10);            // Fetch the fractional part decimal number        let fractional = num - Integral;            // Conversion of integral part to        // binary equivalent        while (Integral > 0)        {            let rem = Integral % 2;                // Append 0 in binary            binary +=            (String.fromCharCode(rem + '0'.charCodeAt()));                Integral = parseInt(Integral / 2, 10);        }            // Reverse string to get original binary        // equivalent        binary = reverse(binary);            // Append point before conversion of        // fractional part        binary += ('.');            // Conversion of fractional part to        // binary equivalent        while (k_prec-- > 0)        {            // Find next bit in fraction            fractional *= 2;            let fract_bit = parseInt(fractional, 10);                if (fract_bit == 1)            {                fractional -= fract_bit;                binary +=                String.fromCharCode(1 + '0'.charCodeAt());            }            else            {                binary +=                String.fromCharCode(0 + '0'.charCodeAt());            }        }            return binary;    }        function reverse(input)    {        let temparray = input.split('');        let left, right = 0;        right = temparray.length - 1;            for (left = 0; left < right; left++, right--)        {            // Swap values of left and right            let temp = temparray[left];            temparray[left] = temparray[right];            temparray[right] = temp;        }        return temparray.join("");    }         let n = 4.47;    let k = 3;    document.write(decimalToBinary(n, k) + "</br>");     n = 6.986;    k = 5;    document.write(decimalToBinary(n, k));     </script>
Output:  
100.011
110.11111
Time complexity: O(len(n)) Auxiliary space: O(len(n)) where len() is the total digits contain in number n.Convert Binary fraction to DecimalReference: http://cs.furman.edu/digitaldomain/more/ch6/dec_frac_to_bin.htm http://www.cquestions.com/2011/07/c-program-for-fractional-decimal-to.htmlThis article is contributed by Shubham Bansal. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
ankthon
Mithun Kumar
Rajput-Ji
29AjayKumar
nidhi_biet
divyeshrabadiya07
binary-representation
Fraction
Bit Magic
Strings
Strings
Bit Magic
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Cyclic Redundancy Check and Modulo-2 Division
Little and Big Endian Mystery
Program to find whether a given number is power of 2
Binary representation of a given number
Bits manipulation (Important tactics)
Reverse a string in Java
Write a program to reverse an array or string
Longest Common Subsequence | DP-4
Write a program to print all permutations of a given string
C++ Data Types