Convert decimal fraction to binary number (original) (raw)

Last Updated : 7 Apr, 2025

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

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 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++ `

// 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;

}

Java

// 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

Python3

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

C#

// 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

JavaScript

PHP

Integral=(int)(Integral = (int)(Integral=(int)(num); // Fetch the fractional part decimal number fractional=fractional = fractional=num - $Integral; // Conversion of integral part to // binary equivalent while ($Integral) { rem=rem = rem=Integral % 2; // Append 0 in binary binary.=chr(binary.=chr(binary.=chr(rem + 48 ); Integral=(int)(Integral = (int)(Integral=(int)(Integral/2); } // Reverse string to get original binary // equivalent binary=strrev(binary=strrev(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; fractbit=(int)fract_bit = (int)fractbit=(int)fractional; if ($fract_bit == 1) { fractional−=fractional -= 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 ?>

`

**Time complexity: O(len(n))
**Auxiliary space: O(len(n))

where len() is the total digits contain in number n.