Преобразование long double в строку - C (СИ)
Формулировка задачи:
Язык Си.
Не могу решить примитивные проблемы. Надо преобразовать число типа long double в строку не могу понять как. Пытался это сделать функцией sprintf преобразование выполняет но по умолчанию дает 6 знаков после '.' либо надо знать количество знаков после точки заранее. Этот вариант не подходит. Вроде в литературе есть упоминание о функции ftoa но я такой не нашел, да и надо преобразовывать long double. Написал свою функцию но не нашел функции modfl() пришлось выполнять преобразование из long double к double. Ну не может быть чтобы не было стандартной функции преобразования из long double к строке.
Решение задачи: «Преобразование long double в строку»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
void func (long double ld)
{
int lg = log10l (ld);
int count;
if (lg < 1)
count = 16;
else if (lg >= 16)
count = 0;
else
count = 16 - lg;
printf ("%.*Lf\n", count, ld);
}
int main (void)
{
func (0.00001232L);
func (1.00001232L);
func (12.00001232L);
func (1234567.00001232L);
func (12345672837468234638746823.00001232L);
return 0;
}
Объяснение кода листинга программы
- В функции
funcпреобразуется число типаlong doubleв строку с использованием функцииprintf. - Переменная
lgиспользуется для хранения результата функцииlog10l, которая вычисляет логарифм по основанию 10 от числаld. - Переменная
countиспользуется для хранения количества десятичных знаков, которые необходимо вывести при преобразовании числа в строку. - Если
lgменьше 1, тоcountустанавливается равным 16. - Если
lgбольше или равно 16, тоcountустанавливается равным 0. - В противном случае,
countустанавливается равным 16 минусlg. - Функция
printfиспользуется для вывода числа типаlong doubleс точностью доcountдесятичных знаков. - В функции
mainвызывается функцияfuncс пятью различными значениями числа типаlong double. - Введенные в функцию
funcчисла представляют собой числа с плавающей точкой, которые необходимо преобразовать в строки. - Возвращаемое значение функции
log10lиспользуется для определения количества десятичных знаков, которые необходимо вывести при преобразовании числа в строку. - Если
lgменьше 1, то выводится число, представляющее собой 16 десятичных знаков. - Если
lgбольше или равно 16, то выводится число без десятичных знаков. - В противном случае, выводится число с точностью до
countдесятичных знаков. - Ввод-вывод данных осуществляется с использованием стандартного ввода-вывода.
- Ввод данных в функцию
funcосуществляется с помощью вызова функцииmain. - Вывод данных из функции
funcосуществляется с помощью функцииprintf. - Ввод-вывод данных происходит в консоль.
- Программа работает с числами типа
long double, которые представляют собой числа с плавающей точкой, обычно с 16-ю десятичными знаками. - Программа использует функции
log10lиprintfиз библиотекиmath.hиstdio.hсоответственно. - Программа завершается возвратом значения 0 из функции
main, что указывает на успешное выполнение программы.