Convierta un número de coma flotante en una string en C

Escriba una función en C ftoa() que convierta un número de coma flotante dado o un doble en una string. No se permite el uso de funciones de biblioteca estándar para la conversión directa. El siguiente es un prototipo de ftoa(). El artículo proporciona información sobre la conversión de C doble a string.

ftoa(n, res, afterpoint)
n          --> Input Number
res[]      --> Array where output string to be stored
afterpoint --> Number of digits to be considered after the point.

Ejemplo:

  • ftoa(1.555, str, 2) debe almacenar «1.55» en res.
  • ftoa(1.555, str, 0) debe almacenar «1» en res.

Recomendamos encarecidamente minimizar el navegador y probarlo usted mismo primero. Una forma simple es usar sprintf() , pero no se permite el uso de funciones de biblioteca estándar para la conversión directa. Enfoque: La idea es separar partes enteras y fraccionarias y convertirlas en strings por separado. Los siguientes son los pasos detallados.

  1. Extraiga la parte entera del punto flotante o el número doble.
  2. Primero, convierta la parte entera a la string.
  3. Extrae la parte fraccionaria por la parte entera exacta de n.
  4. Si d es distinto de cero, haga lo siguiente.
    1. Convierta la parte fraccionaria en un número entero multiplicándolo con pow(10, d)
    2. Convierta el valor entero en una string y añádalo al resultado.

A continuación se muestra la implementación en C del enfoque anterior. 

C

// C program for implementation of ftoa()
#include <math.h>
#include <stdio.h>
 
// Reverses a string 'str' of length 'len'
void reverse(char* str, int len)
{
    int i = 0, j = len - 1, temp;
    while (i < j) {
        temp = str[i];
        str[i] = str[j];
        str[j] = temp;
        i++;
        j--;
    }
}
 
// Converts a given integer x to string str[].
// d is the number of digits required in the output.
// If d is more than the number of digits in x,
// then 0s are added at the beginning.
int intToStr(int x, char str[], int d)
{
    int i = 0;
    while (x) {
        str[i++] = (x % 10) + '0';
        x = x / 10;
    }
 
    // If number of digits required is more, then
    // add 0s at the beginning
    while (i < d)
        str[i++] = '0';
 
    reverse(str, i);
    str[i] = '\0';
    return i;
}
 
// Converts a floating-point/double number to a string.
void ftoa(float n, char* res, int afterpoint)
{
    // Extract integer part
    int ipart = (int)n;
 
    // Extract floating part
    float fpart = n - (float)ipart;
 
    // convert integer part to string
    int i = intToStr(ipart, res, 0);
 
    // check for display option after point
    if (afterpoint != 0) {
        res[i] = '.'; // add dot
 
        // Get the value of fraction part upto given no.
        // of points after dot. The third parameter
        // is needed to handle cases like 233.007
        fpart = fpart * pow(10, afterpoint);
 
        intToStr((int)fpart, res + i + 1, afterpoint);
    }
}
 
// Driver program to test above function
int main()
{
    char res[20];
    float n = 233.007;
    ftoa(n, res, 4);
    printf("\"%s\"\n", res);
    return 0;
}
Producción:

"233.0070"

Complejidad de tiempo : O (logn)

Espacio Auxiliar : O(1)

Nota: El programa realiza una operación similar si en lugar de float, se toma un tipo doble. Este artículo es una contribución de Jayasantosh Samal. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

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 *