Open In App

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

Last Updated : 13 Oct, 2022
Suggest changes
Share
Like Article
Like
Report

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++
// C++ program to binary real number to string #include <iostream> #include<string> 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"<<endl;  double m = 0.72;  result= toBinary(m);  cout<<"("<<result<<")"<<endl;  } // This code is contributed by Himanshu Batra 
Java
// Java program to Binary real number to String. import java.lang.*; import java.io.*; import java.util.*; // Class Representation 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 Representation 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
<?php // PHP program to binary real number // to string // Function to convert Binary real // number to String function 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 ?> 
JavaScript
<script> // JavaScript program to binary real number to string // Function to convert Binary real // number to String function toBinary(n){  // Check if the number is Between 0 to 1 or Not  if(n >= 1 || n <= 0)  return "ERROR"  let answer = ""  let frac = 0.5  answer = answer + "."  // 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  b = n * 2  if (b >= 1){  answer = answer + "1"  n = b - 1  }  else{  answer = answer + "0"  n = b  }  }  return answer } // Driver code let n = 0.625 let result = toBinary(n) document.write(`(0 ${result}) in base 2`,"</br>") let m = 0.72 result = toBinary(m) document.write(`(${result})`,"</br>") // This code is contributed by Shinjanpatra </script> 

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 <iostream> #include<string> 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"<<endl;  double m = 0.72;  result= toBinary(m);  cout<<"("<<result<<")"<<endl;  } 
Java
// Java program to Binary real number to String. import java.lang.*; import java.io.*; import java.util.*; // Class representation 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 representation 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
<?php // PHP program to Binary real number to String. // Function to convert Binary real // number to String function 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 ?> 
JavaScript
<script> // Javascript program to Binary real  // number to String.  // Main function to convert Binary // real number to String  function 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 Decimal  let 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.
 


Next Article

Similar Reads

Practice Tags :