Given an string of binary number n. Convert binary fractional n into it’s decimal equivalent.
Examples:
Input: n = 110.101 Output: 6.625 Input: n = 101.1101 Output: 5.8125
We strongly recommend that you click here and practice it, before moving on to the solution.
Following are the steps of converting binary fractional to decimal.
A) Convert the integral part of binary to decimal equivalent
- Multiply each digit separately from left side of radix point till the first digit by 20, 21, 22,… respectively.
- Add all the result coming from step 1.
- Equivalent integral decimal number would be the result obtained in step 2.
B) Convert the fractional part of binary to decimal equivalent
- Divide each digit from right side of radix point till the end by 21, 22, 23, … respectively.
- Add all the result coming from step 1.
- Equivalent fractional decimal number would be the result obtained in step 2.
C) Add both integral and fractional part of decimal number.
Illustration
Let's take an example for n = 110.101 Step 1: Conversion of 110 to decimal => 1102 = (1*22) + (1*21) + (0*20) => 1102 = 4 + 2 + 0 => 1102 = 6 So equivalent decimal of binary integral is 6. Step 2: Conversion of .101 to decimal => 0.1012 = (1*1/2) + (0*1/22) + (1*1/23) => 0.1012 = 1*0.5 + 0*0.25 + 1*0.125 => 0.1012 = 0.625 So equivalent decimal of binary fractional is 0.625 Step 3: Add result of step 1 and 2. => 6 + 0.625 = 6.625
Implementation:
C++
// C++ program to demonstrate above steps of // binary fractional to decimal conversion #include<bits/stdc++.h> using namespace std;
// Function to convert binary fractional to // decimal double binaryToDecimal(string binary, int len)
{ // Fetch the radix point
size_t point = binary.find( '.' );
// Update point if not found
if (point == string::npos)
point = len;
double intDecimal = 0, fracDecimal = 0, twos = 1;
// Convert integral part of binary to decimal
// equivalent
for ( int i = point-1; i>=0; --i)
{
// Subtract '0' to convert character
// into integer
intDecimal += (binary[i] - '0' ) * twos;
twos *= 2;
}
// Convert fractional part of binary to
// decimal equivalent
twos = 2;
for ( int i = point+1; i < len; ++i)
{
fracDecimal += (binary[i] - '0' ) / twos;
twos *= 2.0;
}
// Add both integral and fractional part
return intDecimal + fracDecimal;
} // Driver code int main()
{ string n = "110.101" ;
cout << binaryToDecimal(n, n.length()) << "\n" ;
n = "101.1101" ;
cout << binaryToDecimal(n, n.length());
return 0;
} |
Java
// Java program to demonstrate above steps of // binary fractional to decimal conversion import java.io.*;
class GFG{
// Function to convert binary fractional to // decimal static double binaryToDecimal(String binary,
int len)
{ // Fetch the radix point
int point = binary.indexOf( '.' );
// Update point if not found
if (point == - 1 )
point = len;
double intDecimal = 0 ,
fracDecimal = 0 ,
twos = 1 ;
// Convert integral part of binary to decimal
// equivalent
for ( int i = point - 1 ; i >= 0 ; i--)
{
intDecimal += (binary.charAt(i) - '0' ) * twos;
twos *= 2 ;
}
// Convert fractional part of binary to
// decimal equivalent
twos = 2 ;
for ( int i = point + 1 ; i < len; i++)
{
fracDecimal += (binary.charAt(i) - '0' ) / twos;
twos *= 2.0 ;
}
// Add both integral and fractional part
return intDecimal + fracDecimal;
} // Driver Code public static void main(String[] args)
{ String n = "110.101" ;
System.out.println(
binaryToDecimal(n, n.length()));
n = "101.1101" ;
System.out.println(
binaryToDecimal(n, n.length()));
} } // This code is contributed by dheeraj_2801 |
Python3
# Python3 program to demonstrate above steps # of binary fractional to decimal conversion # Function to convert binary fractional # to decimal def binaryToDecimal(binary, length) :
# Fetch the radix point
point = binary.find( '.' )
# Update point if not found
if (point = = - 1 ) :
point = length
intDecimal = 0
fracDecimal = 0
twos = 1
# Convert integral part of binary
# to decimal equivalent
for i in range (point - 1 , - 1 , - 1 ) :
# Subtract '0' to convert
# character into integer
intDecimal + = (( ord (binary[i]) - ord ( '0' )) * twos)
twos * = 2
# Convert fractional part of binary
# to decimal equivalent
twos = 2
for i in range (point + 1 , length):
fracDecimal + = (( ord (binary[i]) -
ord ( '0' )) / twos);
twos * = 2.0
# Add both integral and fractional part
ans = intDecimal + fracDecimal
return ans
# Driver code : if __name__ = = "__main__" :
n = "110.101"
print (binaryToDecimal(n, len (n)))
n = "101.1101"
print (binaryToDecimal(n, len (n)))
# This code is contributed # by aishwarya.27 |
C#
// C# program to demonstrate above steps of // binary fractional to decimal conversion using System;
class GFG{
// Function to convert binary fractional to // decimal static double binaryToDecimal( string binary,
int len)
{ // Fetch the radix point
int point = binary.IndexOf( '.' );
// Update point if not found
if (point == -1)
point = len;
double intDecimal = 0,
fracDecimal = 0,
twos = 1;
// Convert integral part of binary to decimal
// equivalent
for ( int i = point - 1; i >= 0; i--)
{
intDecimal += (binary[i] - '0' ) * twos;
twos *= 2;
}
// Convert fractional part of binary to
// decimal equivalent
twos = 2;
for ( int i = point + 1; i < len; i++)
{
fracDecimal += (binary[i] - '0' ) / twos;
twos *= 2.0;
}
// Add both integral and fractional part
return intDecimal + fracDecimal;
} // Driver Code public static void Main( string [] args)
{ string n = "110.101" ;
Console.Write(
binaryToDecimal(n, n.Length) + "\n" );
n = "101.1101" ;
Console.Write(
binaryToDecimal(n, n.Length));
} } // This code is contributed by rutvik_56 |
Javascript
<script> // JavaScript program to demonstrate above steps of
// binary fractional to decimal conversion
// Function to convert binary fractional to
// decimal
function binaryToDecimal(binary, len) {
// Fetch the radix point
var point = binary.indexOf( "." );
// Update point if not found
if (point === -1) point = len;
var intDecimal = 0,
fracDecimal = 0,
twos = 1;
// Convert integral part of binary to decimal
// equivalent
for ( var i = point - 1; i >= 0; i--) {
intDecimal += (binary[i] - "0" ) * twos;
twos *= 2;
}
// Convert fractional part of binary to
// decimal equivalent
twos = 2;
for ( var i = point + 1; i < len; i++) {
fracDecimal += (binary[i] - "0" ) / twos;
twos *= 2.0;
}
// Add both integral and fractional part
return intDecimal + fracDecimal;
}
// Driver Code
var n = "110.101" ;
document.write(binaryToDecimal(n, n.length) + "<br>" );
n = "101.1101" ;
document.write(binaryToDecimal(n, n.length));
</script>
|
Output
6.625 5.8125
Time complexity: O(len(n))
Auxiliary space: O(len(n))
Where len is the total digits contain in binary number of n.
See this: Convert decimal fraction to binary number.