Open In App

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

Last Updated : 13 Oct, 2022
Comments
Improve
Suggest changes
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
Practice Tags :

Similar Reads