Función atof()

Alejandro Sierra Domínguez

// atof(): Función que almacena un número real como una cadena y la pasa a ‘float’
// NOTA: Aunque el algoritmo es correcto, desgraciadamente no da la exactitud requerida (estamos en ello).

 
#include <stdio.h>
#include <string.h>
#include <math.h>
 
float b_atof(char*);
 
main()
{
     char s[100];
     printf("introduce un numero real como cadena de caracteres (ejem. 10.35, -10.35): n");
     gets(s);
     system("cls");
     printf("el numero real es: %f",b_atof(s));
printf("nFINn");
system("PAUSE");
return 0;
}
 
float b_atof(char vec[]){                // se le pasa el número en el array vec[] y lo devuelve como un float
      int i,j,signo,pent,pdec,dz;
      float num;
      char entvec[100],decvec[100];
      signo=0;
      num=0;
      pent=0;
      pdec=0;
      i=0;
      j=0;
 
      if(vec[0]==’-‘){              // detectamos si el número es negativo
                      i=1;
                      signo=1;
                      }
      while((vec[i] !=”)&&(vec[i] !=’.’)){   // transferimos parte entera a entvec[]
                   pent++;
                   entvec[j]=vec[i];
                   j++;
                   i++;
                   }
                   entvec[j]=”;
      j=0;
      if(vec[i] !=”) i++;                     // saltamos el punto o la coma del número decimal
      while(vec[i] !=”){                     // transferimos parte decimal si la hay a decvec[]
                   pdec++;
                   decvec[j]=vec[i];
                   j++;
                   i++;
                   }
                   decvec[j]=”;
      i=0;
      while(entvec[i] !=”){            // traspaso de la parte entera a número entero
                      dz=1;
                      for(j=i;j<pent-1;j++) dz=dz*10;  // unidades, decenas, centenas, etc.
                      num=num+(dz*(entvec[i]-‘0’));
                      i++;
                      }
      i=0;
      while(decvec[i] !=”){        // traspaso de la parte decimal a número real
                      dz=10;
                      for(j=0;j<i;j++) dz=dz*10;    // décimas, centésimas, milésimas, etc.
                      num=num+((float)(decvec[i]-‘0’)/dz);
                      i++;
                      }
 
      if(signo==1) num=-num;   // transferimos signo correcto al final
      return(num);
      }

Esta entrada fue publicada en Sin categoría. Guarda el enlace permanente.

Una respuesta a Función atof()

  1. Ricardo dijo:

    he añadido comentarios aclaratorios.muy bien,ric.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s