Convertir fracción binaria a decimal

Dada una string de número binario n . Convierte n fraccionario binario en su equivalente decimal.

Ejemplos:

Input: n = 110.101
Output: 6.625

Input: n = 101.1101
Output: 5.8125
Le recomendamos encarecidamente que haga clic aquí y lo practique antes de pasar a la solución.

Los siguientes son los pasos para convertir fracciones binarias a decimales.

A) Convertir la parte integral del equivalente binario a decimal

  1. Multiplique cada dígito por separado desde el lado izquierdo del punto base hasta el primer dígito por 2 0 , 2 1 , 2 2 ,… respectivamente.
  2. Agregue todo el resultado proveniente del paso 1.
  3. Número decimal integral equivalente sería el resultado obtenido en el paso 2.

B) Convertir la parte fraccionaria de binario a decimal equivalente

  1. Divide cada dígito desde el lado derecho del punto base hasta el final por 2 1 , 2 2 , 2 3 , … respectivamente.
  2. Agregue todo el resultado proveniente del paso 1.
  3. El número decimal fraccionario equivalente sería el resultado obtenido en el paso 2.

C) Suma tanto la parte entera como la fraccionaria del número decimal.
Ilustración

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

Implementación:

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>
Producción

6.625
5.8125

Complejidad temporal: O(len(n)) 
Espacio auxiliar: O(len(n)) 

Donde len es el total de dígitos contenidos en el número binario de n.

Ver esto: Convertir fracción decimal a número binario.
Este artículo es una contribución de Shubham Bansal . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *