C ++ atof () - Biblioteca estándar de C ++

La función atof () en C ++ interpreta el contenido de una cadena como un número de punto flotante y devuelve su valor como un doble.

atof () prototipo

 doble atof (const char * str);

Está definido en el archivo de encabezado.

Parámetros atof ()

  • str : una cadena que tiene la representación de un número de punto flotante.

atof () Valor de retorno

La función atof () devuelve:

  • un valor doble (que se convierte de la cadena).
  • 0.0 si no se pudo realizar una conversión válida.

Si el valor convertido está fuera del rango, provoca un comportamiento indefinido.

Ejemplo 1: ¿Cómo funciona la función atof ()?

 #include #include using namespace std; int main() ( char numberString() = "-32.40"; double numberInDouble; cout << "Number in String = " << numberString << endl; numberInDouble = atof(numberString); cout << "Number in Double = " << numberInDouble; return 0; ) 

Cuando ejecute el programa, la salida será:

 Número en cadena = -32.40 Número en doble = -32.4 

Un valor de punto flotante válido para la función atof () consta de un signo + o - opcional seguido de uno de los siguientes conjuntos:

  • Para el valor de coma flotante decimal:
    • Un grupo de dígitos decimales (0-9) , que opcionalmente contiene un punto decimal (.). Por ejemplo: 9.056, -0.013, etc.
    • Una parte de exponente opcional ( eo E) seguida de un signo + o - opcional y una secuencia no vacía de dígitos decimales. Por ejemplo: 1.23455e + 009, 5.23e-018, etc.
  • Para valor de coma flotante hexadecimal:
    • Una cadena que comienza con 0xo 0X, seguida de una secuencia no vacía de dígitos hexadecimales, que opcionalmente contiene un punto decimal (.). Por ejemplo: 0xf1b, -0xb1b.51, etc.
    • Una parte de exponente opcional ( po P) seguida de un signo + o - opcional y una secuencia no vacía de dígitos hexadecimales. Por ejemplo: 0x51c.23p5, -0x2a.3p-3, etc.
  • Infinito:
    • INFo INFINITY(ignorando el caso). Por ejemplo: -iNf, INfINiTy, etc.
  • NaN (no es un número):
    • NANo NANsequence(ignorando el caso) donde la secuencia es una secuencia de caracteres que consta solo de caracteres alfanuméricos o el guión bajo (_) El resultado es un NaN silencioso. Por ejemplo: Nan, NaN12, etc.

Ejemplo 2: ¿Cómo funciona atof () con exponentes y hexadecimales?

 #include #include using namespace std; int main() ( cout << "-44.01e-3" << " to Double = " << atof("-44.01e-0") << endl; cout << "-44.01e-3" << " to Double = " << atof("-44.01e-3") << endl; cout << "0xf1bc" << " to Double = " << atof("0xf1bc") << endl; cout << "0xf1bc.51" << " to Double = " << atof("0xf1bc.51") << endl; return 0; ) 

Cuando ejecute el programa, la salida será:

 -44.01e-3 a Doble = -44.01 -44.01e-3 a Doble = -0.04401 0xf1bc a Doble = 61884 0xf1bc.51 a Doble = 61884.3 

Ejemplo 3: atof Cases para INFINITY y NaN

 #include #include using namespace std; int main() ( cout << "INFINITY" << " to Double = " << atof("INFINITY") << endl; cout << "Inf" << " to Double = " << atof("Inf") << endl; cout << "Nan" << " to Double = " << atof("Nan") << endl; cout << "NAN" << " to Double = " << atof("NAN") << endl; return 0; ) 

Cuando ejecute el programa, la salida será:

 INFINITO a Doble = inf Inf a Doble = inf Nan a Doble = nan NAN a Doble = nan

En general, un argumento de punto flotante válido para la función atof () tiene la siguiente forma:

 (espacio en blanco) (- | +) (dígitos) (. dígitos) ((e | E) (- | +) dígitos)

La función atof () ignora todos los espacios en blanco iniciales hasta que se encuentra el carácter primario que no es un espacio en blanco.

Luego, a partir de este carácter, toma tantos caracteres como sea posible que forman una representación de punto flotante válida y los convierte en un valor de punto flotante. Lo que quede de la cadena después del último carácter válido se ignora y no tiene ningún efecto en el resultado.

Ejemplo 4: función atof () con espacios en blanco y caracteres finales

 #include #include using namespace std; int main() ( cout << "25.5" << " to Double = " << atof(" 25.5") << endl; cout << "25.5 " << " to Double = " << atof(" 25.5 ") << endl; cout << "25.5abcd" << " to Double = " << atof("25.5abcd") << endl; // Returns 0 because of invalid conversion cout << "abcd25.5" << " to Double = " << atof("abcd25.5") << endl; // Rules for whitespace and trailing character also apply for infinity and Nan cout << "INFINITYabcd" << " to Double = " << atof("INFINITYabcd") << endl; cout << "INFINITY" << " to Double = " << atof(" INFINITY") << endl; cout << "Nanlll" << " to Double = " << atof("Nanlll") << endl; return 0; )

Cuando ejecute el programa, la salida será:

 25.5 a Double = 25.5 25.5 a Double = 25.5 25.5abcd a Double = 25.5 abcd 25.5 a Double = 0 INFINITYabcd a Double = inf INFINITY a Double = inf Nanlll a Double = nan

Articulos interesantes...