Related Articles

# Convert decimal fraction to binary number

• Difficulty Level : Medium
• Last Updated : 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```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

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

## PHP

 ``

## Javascript

 ``

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 write.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.