Convert decimal fraction to binary number

Given an 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
We strongly recommend that you click here and practice it, before moving on to the solution.

A) Convert the integral part of decimal to binary equivalent

  1. Divide the decimal number by 2 and store remainders in array.
  2. Divide the quotient by 2.
  3. Repeat step 2 until we get the quotient equal to zero.
  4. Equivalent binary number would be reverse of all remainders of step 1.

B) Convert the fractional part of decimal to binary equivalent

  1. Multiply the fractional decimal number by 2.
  2. Integral part of resultant decimal number will be first digit of fraction binary number.
  3. 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 bianry 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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 point
string 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 code
int main()
{
  
    double n = 4.47;
    int k = 3;
    cout << decimalToBinary(n, k) << "\n";
  
    n = 6.986 , k = 5;
    cout << decimalToBinary(n, k);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to convert fractional decimal
// to binary number
import 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to convert fractional 
# decimal to binary number 
  
# Function to convert decimal to binary 
# upto k-precision after decimal point 
def 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 code 
if __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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to convert fractional decimal
// to binary number
using 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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP 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)
{
    $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
?>

chevron_right


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 Decimal

Reference:
http://cs.furman.edu/digitaldomain/more/ch6/dec_frac_to_bin.htm
http://www.cquestions.com/2011/07/c-program-for-fractional-decimal-to.html

This article is contributed by Shubham Bansal. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.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.



My Personal Notes arrow_drop_up