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

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

Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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

 // C++ program to binary real number to string #include #include using namespace std;    // Function to convert Binary real // number to String string 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 code int main() {     // Input value      double n = 0.625;             string result = toBinary(n);     cout<<"(0"<< result <<") in base 2"<

Java

 // Java program to Binary real number to String. import java.lang.*; import java.io.*; import java.util.*;    // Class Reperesentation of Binary real number // to String class 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

 # Python3 program to binary real number to string    # Function to convert Binary real # number to String def 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 code if __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#

 // C# program to Binary real number to String.     using System; using System.Text;    // Class Reperesentation of Binary real number  // to String  class 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

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

 // C++ program to Binary real number to String. #include #include using namespace std;    // Function to convert Binary real // number to String string 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 code int main() {     // Input value      double n = 0.625;            string result = toBinary(n);     cout<<"(0"<< result <<") in base 2"<

Java

 // Java program to Binary real number to String. import java.lang.*; import java.io.*; import java.util.*;    // Class Reperesentation of Binary real number // to String class 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

 # Python3 program to Binary real number to String.    # Function to convert Binary real # number to String def 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 value  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 mits

C#

 // C# program to Binary real number to String.  using System;    // Class Reperesentation of Binary  // real number to String  class 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

 = 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 ?>

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

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.