strtod – преобразование строки в число типа double.
Синтаксис:
#include < stdlib.h >
double strtod (const char *str, char **endstr);
Аргументы:
str – указатель на строку для преобразования.
endstr – указатель на переменную, в которую будет помещен указатель на непреобразованный остаток строки или на начало строки str, если преобразование не удалось или вся строка преобразована.
Возвращаемое значение:
При успешном завершении функции возвращается результат преобразования – число типа double, а по адресу указанному в переменной endstr записывается указатель на оставшуюся непреобразованную часть строки или указатель на начало строки, если вся строка была преобразована.
Если преобразование не может быть выполнено, то возвращается 0, а по адресу указанному в переменной endstr записывается указатель на начало строки str.
Если в результате преобразования получено слишком большое по абсолютной величине число, то будет возвращено плюс или минус HUGE_VAL в зависимости от знака числа и переменной errno будет присвоено значение [ERANGE]. Если получено слишком маленькое по абсолютной величине число, то будет возвращен 0 и переменной errno будет присвоено значение [ERANGE]. При этом по адресу указанному в переменной endstr записывается указатель на оставшуюся непреобразованную часть строки или указатель на начало строки, если вся строка была преобразована.
Описание:
Функция преобразует строку (с числом с плавающей точкой) в число типа double. Число с плавающей точкой - форма представления действительных чисел, в которой число хранится в форме мантиссы и показателя степени, например 123.45*e6, где 123.45 – мантисса, 6 – порядок.
Преобразуемая строка должна иметь вид: [pr] [zn] [dс] [.] [dd] [e[znp]dp]
Где:
[pr] – пробел. В начале преобразуемой строки пробел необязателен. Если в одной строке содержится несколько чисел в символьном формате, то они должны быть разделены пробелами.
[zn] – знак мантиссы + или - , если знак отсутствует, то мантисса считается положительной.
[dс] – десятичные цифры целой части мантиссы, если данные цифры отсутствует, то целая часть мантиссы считается нулевой.
[.] – десятичная точка (разделитель целой и дробной части мантиссы), если данный знак отсутствует, то мантисса содержит только целую часть.
[dd] - десятичные цифры дробной части мантиссы, если данные числа отсутствуют, то мантисса содержит только целую часть.
[e] – символ e или E, если данный символ отсутствует, то число с плавабющей точкой не содержит порядок (содержит нулевой порядок).
[znp] – знак порядка + или - , если знак отсутствует, то порядок считается положительным.
[dp] – десятичные цифры порядка, если цифры отсутствуют порядок равен 0.
Наличие либо целой, либо дробной части числа мантиссы обязательно, порядок может полностью отсутствовать, но если он указан, обязательно перед порядком должен идти символ e или E. Пробелы внутри числа с плавающей точкой недопустимы.
Примеры записи числа с плавающей точкой: +123.45e6, +123.45E6, 123E-6, -123E6, -.45e6, +123.45 и т.д.
В одной преобразуемой строке может быть несколько чисел с плавающей точкой, в этом случае каждое число должно быть отдалено от другого пробелом.
Пример:
В примере строка «+123.45e6 +123.45E6 0 123E-6 -123E6 -.45e6 +123.45» преобразуется в семь чисел типа double и результат выводится на консоль.
#include < stdio.h > // Для printf
#include < stdlib.h > // Для strtod
int main (void)
{
// Преобразуемая строка
char* str = “+123.45e6 +123.45E6 123E-6 -123E6 -.45e6 +123.45”;
// Указатель, на непреобразованный остаток строки str,
// в начале указывает на начало строки str
char* nstr = str;
// Указатель, используемый для определения завершения
// преобразования строки.
char* tstr;
// Переменная для сохранения результата преобразования
double d = 0;
// Организуем бесконечный цикл
while (1)
{
// Для определения завершения преобразования всей строки,
// записываем в tstr адрес начала преобразуемого в
// данной итерации участка строки и если, после попытки
// преобразования, указатель на непреобразованный участок,
// помещенный в nstr, такой же, как был сохранен в tstr и в
// переменную d в результате преобразования записан 0,
// то значит вся строка преобразована.
tstr = nstr;
// Преобразуем очередной участок строки
d = strtod (nstr,&nstr);
// Проверяем вся ли строка преобразована и если вся строка
// преобразована выходим из цикла
if (d==0 && tstr==nstr) break;
// Выводим результат преобразования на экран
printf (“%f\n”,d);
}
return 0;
}
| |
Результат:
Вывод в консоль:
123450000.000000
123450000.000000
0.000000
0.000123
-123000000.000000
-450000.000000
123.450000
|
Смотри так же:
-
|