Рубрики

Преобразовать число с плавающей запятой в строку в C

Напишите функцию C ftoa (), которая преобразует заданное число с плавающей точкой или двойное число в строку. Использование стандартных библиотечных функций для прямого преобразования не допускается. Ниже приведен прототип функции ftoa (). Статья дает представление о преобразовании двойного C в строку.

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.

Пример:

  • ftoa (1.555, str, 2) должен хранить «1.55» в рез.
  • ftoa (1.555, str, 0) должен хранить «1» в рез.


Мы настоятельно рекомендуем свернуть браузер и попробовать это в первую очередь.

Простым способом является использование sprintf () , но использование стандартных библиотечных функций для прямого преобразования не допускается.

Подход: идея состоит в том, чтобы разделить целые и дробные части и преобразовать их в строки отдельно. Ниже приведены подробные шаги.

  1. Извлечь целую часть из числа с плавающей точкой или двойного числа.
  2. Сначала преобразуйте целую часть в строку.
  3. Извлечь дробную часть из точной целой части из n.
  4. Если d не ноль, то сделайте следующее.
    1. Преобразуйте дробную часть в целое число, умножив его на pow (10, d)
    2. Преобразуйте целочисленное значение в строку и добавьте к результату.

Ниже приводится реализация вышеуказанного подхода.

// C программа для реализации ftoa ()
#include <math.h>
#include <stdio.h>

  
// Обращает строку 'str' длины '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--;

    }

}

  
// Преобразует данное целое число x в строку str [].
// d - количество цифр, необходимое для вывода.
// Если d больше, чем число цифр в x,
// тогда 0 добавляются в начале.

int intToStr(int x, char str[], int d)

{

    int i = 0;

    while (x) {

        str[i++] = (x % 10) + '0';

        x = x / 10;

    }

  

    // Если требуемое количество цифр больше, то

    // добавляем 0 в начале

    while (i < d)

        str[i++] = '0';

  

    reverse(str, i);

    str[i] = '\0';

    return i;

}

  
// Преобразует число с плавающей запятой / двойное число в строку.

void ftoa(float n, char* res, int afterpoint)

{

    // Извлекаем целую часть

    int ipart = (int)n;

  

    // Извлечь плавающую часть

    float fpart = n - (float)ipart;

  

    // преобразовать целую часть в строку

    int i = intToStr(ipart, res, 0);

  

    // проверка опции отображения после точки

    if (afterpoint != 0) {

        res[i] = '.'; // добавить точку

  

        // Получить значение дробной части до заданного номера.

        // точек после точки Третий параметр

        // необходим для обработки случаев, таких как 233.007

        fpart = fpart * pow(10, afterpoint);

  

        intToStr((int)fpart, res + i + 1, afterpoint);

    }

}

  
// Программа драйвера для проверки вышеуказанной функции

int main()

{

    char res[20];

    float n = 233.007;

    ftoa(n, res, 4);

    printf("\"%s\"\n", res);

    return 0;

}

Выход:

"233.0070"

Примечание . Программа выполняет аналогичную операцию, если вместо float используется двойной тип.

Эта статья предоставлена Джаясантошем Самалем. Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Преобразовать число с плавающей запятой в строку в C

0.00 (0%) 0 votes