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.
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.
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 |
PHP
<?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 ?> |
Javascript
<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> |
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
This article is contributed by Shubham Bansal. If you like neveropen 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 neveropen main page and help other Geeks.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!