Converting a Real Number (between 0 and 1) to Binary String - GeeksforGeeks

16 Dec, 2021
Given a real number between 0 and 1 (e.g., 0.72) that is passed in as a double, print the binary representation. If the number cannot be represented accurately in binary with at most 32 characters, print” ERROR:’ 
Examples: 
Input :  (0.625)10
Output : (0.101)2

Input : (0.72)10
Output : ERROR
 
Solution: First, let’s start off by asking ourselves what a non-integer number in binary looks like. By analogy to a decimal number, the binary number 0 .1012 would look like: 0. 1012 = 1 * 1/21 + 0 *1/22 + 1 * 1/23 . 
Method 1: Multiply the decimal part by 2
To print the decimal part, we can multiply by 2 and check if 2*n is greater than or equal to 1. This is essentially “shifting” the fractional sum. That is: 
r = 210 * n;
  = 210 * 0.1012;
  = 1 * 1/20 + 0 *1/21 + 1 * 1/22;
  = 1.012;
If r >= 1, then we know that n had a 1 right after the decimal point. By doing this continuously, we can check every digit. 
C++
Java
Python3
C#
PHP
// C++ program to binary real number to string#include <iostream>#include<string>using namespace std; // Function to convert Binary real// number to Stringstring toBinary(double n){    // Check if the number is Between 0 to 1 or Not    if (n >= 1 || n <= 0)        return "ERROR";     string answer;    double frac = 0.5;    answer.append(".");     // Setting a limit on length: 32 characters.            while (n > 0)    {                 //Setting a limit on length: 32 characters            if (answer.length() >= 32)                return "ERROR";             // Multiply n by 2 to check it 1 or 0            double b = n * 2;            if (b >= 1)            {                answer.append("1");                n = b - 1;            }            else            {                answer.append("0");                n = b;            }        }        return answer;} // Driver codeint main(){    // Input value    double n = 0.625;         string result = toBinary(n);    cout<<"(0"<< result <<") in base 2"<<endl;     double m = 0.72;    result= toBinary(m);    cout<<"("<<result<<")"<<endl;} // This code is contributed by Himanshu Batra
// Java program to Binary real number to String.import java.lang.*;import java.io.*;import java.util.*; // Class Representation of Binary real number// to Stringclass BinaryToString{    // Main function to convert Binary real number    // to String    static String printBinary(double num)    {        // Check Number is Between 0 to 1 or Not        if (num >= 1 || num <= 0)            return "ERROR";         StringBuilder binary = new StringBuilder();        binary.append(".");         while (num > 0)        {            /* Setting a limit on length: 32 characters,               If the number cannot be represented               accurately in binary with at most 32               character  */            if (binary.length() >= 32)                return "ERROR";             // Multiply by 2 in num to check it 1 or 0            double r = num * 2;            if (r >= 1)            {                binary.append(1);                num = r - 1;            }            else            {                binary.append(0);                num = r;            }        }        return binary.toString();    }     // Driver Code    public static void main(String[] args)    {        double num1 = 0.625; // Input value in Decimal        String output = printBinary(num1);        System.out.println("(0" + output + ")  in base 2");         double num2 = 0.72;        output = printBinary(num2);        System.out.println("(" + output + ") ");    }}
# Python3 program to binary real number to string # Function to convert Binary real# number to Stringdef toBinary(n):     # Check if the number is Between 0 to 1 or Not    if(n >= 1 or n <= 0):        return "ERROR"     answer = ""    frac = 0.5    answer = answer + "."     # Setting a limit on length: 32 characters.    while(n > 0):         # Setting a limit on length: 32 characters        if(len(answer) >= 32):            return "ERROR"         # Multiply n by 2 to check it 1 or 0        b = n * 2        if (b >= 1):             answer = answer + "1"            n = b - 1         else:            answer = answer + "0"            n = b     return answer # Driver codeif __name__=='__main__':    n = 0.625    result = toBinary(n)    print("(0", result, ") in base 2")    m = 0.72    result = toBinary(m)    print("(", result, ")") # This code is contributed by# Sanjit_Prasad
// C# program to Binary real number to String. using System;using System.Text; // Class Representation of Binary real number// to Stringclass BinaryToString{    // Main function to convert Binary real number    // to String    static String printBinary(double num)    {        // Check Number is Between 0 to 1 or Not        if (num >= 1 || num <= 0)            return "ERROR";         StringBuilder binary = new StringBuilder();        binary.Append(".");         while (num > 0)        {            /* Setting a limit on length: 32 characters,            If the number cannot be represented            accurately in binary with at most 32            character */            if (binary.Length >= 32)                return "ERROR";             // Multiply by 2 in num to check it 1 or 0            double r = num * 2;            if (r >= 1)            {                binary.Append(1);                num = r - 1;            }            else            {                binary.Append(0);                num = r;            }        }        return binary.ToString();    }     // Driver Code    public static void Main()    {        double num1 = 0.625; // Input value in Decimal        String output = printBinary(num1);        Console.WriteLine("(0 " + output + ") in base 2");         double num2 = 0.72;        output = printBinary(num2);    Console.WriteLine("(" + output + ") ");    }}
<?php// PHP program to binary real number// to string // Function to convert Binary real// number to Stringfunction toBinary($n){    // Check if the number is Between    // 0 to 1 or Not    if ($n >= 1 || $n <= 0)        return "ERROR";     $answer = "";    $frac = 0.5;    $answer .= ".";     // Setting a limit on length: 32 characters.            while ($n > 0)    {                 //Setting a limit on length: 32 characters        if (strlen($answer) >= 32)                return "ERROR";             // Multiply n by 2 to check it 1 or 0            $b = $n * 2;            if ($b >= 1)            {                $answer .= "1";                $n = $b - 1;            }            else            {                $answer .= "0";                $n = $b;            }        }        return $answer;} // Driver code // Input value$n = 0.625; $result = toBinary($n);echo "(0" . $result . ") in base 2\n"; $m = 0.72;$result= toBinary($m);echo "(" . $result . ")";     // This code is contributed by mits?>
Output: 
(0.101)  in base 2
(ERROR) 
Method 2
Alternatively, rather than multiplying the number by two and comparing it to 1, we can compare the number to . 5, then . 25, and so on. The code below demonstrates this approach.  
C++
Java
Python3
C#
PHP
Javascript
// C++ program to Binary real number to String.#include <iostream>#include<string>using namespace std; // Function to convert Binary real// number to Stringstring toBinary(double n){    // Check if the number is Between 0 to 1 or Not    if (n >= 1 || n <= 0)        return "ERROR";     string answer;    double frac = 0.5;    answer.append(".");     // Setting a limit on length: 32 characters.            while (n > 0)    {        // 32 char max        if (answer.length() >= 32)            return "ERROR";    // compare the number to .5        if (n >= frac)        {            answer.append("1");            n = n- frac;        }        else        {            answer.append("0");        }                 frac /= 2;    }    return answer;} // Driver codeint main(){    // Input value    double n = 0.625;         string result = toBinary(n);    cout<<"(0"<< result <<") in base 2"<<endl;     double m = 0.72;    result= toBinary(m);    cout<<"("<<result<<")"<<endl;}
// Java program to Binary real number to String.import java.lang.*;import java.io.*;import java.util.*; // Class Reperesentation of Binary real number// to Stringclass BinaryToString{    // Main function to convert Binary real    // number to String    static String printBinary(double num)    {        // Check Number is Between 0 to 1 or Not        if (num >= 1 || num <= 0)            return "ERROR";         StringBuilder binary = new StringBuilder();        double frac = 0.5;        binary.append(".");         while (num > 0)        {            /* Setting a limit on length: 32 characters,               If the number cannot be represented               accurately in binary with at most 32               characters  */            if (binary.length() >= 32)                return "ERROR";             // It compare the number to . 5.            if (num >= frac)            {                binary.append(1);                num -= frac;            }            else                           binary.append(0);             // Now it become 0.25            frac /= 2;        }        return binary.toString();    }     // Driver Code    public static void main(String[] args)    {        double num1 = 0.625; // Input value in Decimal        String output = printBinary(num1);        System.out.println("(0" + output + ")  in base 2");         double num2 = 0.72;        output = printBinary(num2);        System.out.println("(" + output + ") ");    }}
# Python3 program to Binary real number to String. # Function to convert Binary real# number to Stringdef toBinary(n):     # Check if the number is Between    # 0 to 1 or Not    if (n >= 1 or n <= 0):        return "ERROR";     frac = 0.5;    answer = ".";     # Setting a limit on length: 32 characters.        while (n > 0):                 # 32 char max        if (len(answer) >= 32):            return "ERROR";                     # compare the number to .5        if (n >= frac):            answer += "1";            n = n - frac;        else:            answer += "0";                 frac = (frac / 2);         return answer; # Driver code # Input valuen = 0.625; result = toBinary(n);print("( 0", result, ") in base 2"); m = 0.72;result = toBinary(m);print("(", result, ")"); # This code is contributed# by mits
// C# program to Binary real number to String.using System; // Class Reperesentation of Binary// real number to Stringclass BinaryToString{    // Main function to convert Binary    // real number to String    static string printBinary(double num)    {        // Check Number is Between        // 0 to 1 or Not        if (num >= 1 || num <= 0)            return "ERROR";         string binary = "";        double frac = 0.5;        binary += ".";         while (num > 0)        {            /* Setting a limit on length: 32 characters,            If the number cannot be represented            accurately in binary with at most 32            characters */            if (binary.Length >= 32)                return "ERROR";             // It compare the number to . 5.            if (num >= frac)            {                binary += "1";                num -= frac;            }            else                       binary += "0";             // Now it become 0.25            frac /= 2;        }        return binary;    }     // Driver Code    public static void Main()    {        double num1 = 0.625; // Input value in Decimal        String output = printBinary(num1);        Console.WriteLine("(0" + output + ") in base 2");         double num2 = 0.72;        output = printBinary(num2);        Console.WriteLine("(" + output + ") ");    }} // This code is contributed by mits
<?php// PHP program to Binary real number to String. // Function to convert Binary real// number to Stringfunction toBinary($n){    // Check if the number is Between    // 0 to 1 or Not    if ($n >= 1 || $n <= 0)        return "ERROR";     $frac = 0.5;    $answer = ".";     // Setting a limit on length: 32 characters.            while ($n > 0)    {        // 32 char max        if (strlen($answer) >= 32)            return "ERROR";                     // compare the number to .5        if ($n >= $frac)        {            $answer.="1";            $n = $n - $frac;        }        else        {            $answer.="0";        }                 $frac = ($frac / 2);    }    return $answer;} // Driver code // Input value$n = 0.625; $result = toBinary($n);print("(0".$result.") in base 2\n"); $m = 0.72;$result = toBinary($m);print("(".$result.")"); // This code is contributed// by chandan_jnu?>
<script> // Javascript program to Binary real// number to String. // Main function to convert Binary// real number to Stringfunction printBinary(num){         // Check Number is Between    // 0 to 1 or Not    if (num >= 1 || num <= 0)        return "ERROR";         let binary = "";    let frac = 0.5;    binary += ".";         while (num > 0)    {                 /* Setting a limit on length: 32 characters,        If the number cannot be represented        accurately in binary with at most 32        characters */        if (binary.length >= 32)            return "ERROR";                 // It compare the number to . 5.        if (num >= frac)        {            binary += "1";            num -= frac;        }        else                   binary += "0";                 // Now it become 0.25        frac = frac / 2;    }    return binary;} // Driver code // Input value in Decimallet num1 = 0.625;let output = printBinary(num1);document.write("(0" + output +               ") in base 2" + "</br>"); let num2 = 0.72;output = printBinary(num2);document.write("(" + output + ") "); // This code is contributed by rameshtravel07 </script>
Output: 
(0.101)  in base 2
(ERROR)  
Both approaches are equally good; choose the one you feel most comfortable with. This article is contributed by Mr. Somesh Awasthi. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@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. 
himanshu batra
Sanjit_Prasad
Rajput-Ji
Mithun Kumar
Chandan_Kumar
rameshtravel07
surinderdawra388
binary-representation
Mathematical
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Find all factors of a natural number | Set 1
Check if a number is Palindrome
Program to print prime numbers from 1 to N.
Program to add two binary strings
Program to multiply two matrices
Fizz Buzz Implementation
Find pair with maximum GCD in an array
Find Union and Intersection of two unsorted arrays
Count all possible paths from top left to bottom right of a mXn matrix
Count ways to reach the n'th stair