Преобразовать строку в число с двойной точностью (double)
#include <stdlib.h>double strtod( const char *ptr,char **endptr );float strtof( const char *ptr,char **endptr );long double strtold( const char *ptr,char **endptr );
NULL
, функция сохраняет в нем указатель на первый нераспознанный символ, найденный в строке.libc
Функции strtod(), strtof() и strtold() преобразуют строку, на которую указывает ptr, в вещественное число:
double
float
long double
Данные функции пропускают все пробельные символы в начале строки, затем ищут последовательность символов, состоящую из необязательного знака плюс или минус, за которым следует:
0x
или 0X
, затем непустая последовательность шестнадцатеричных символов, опционально содержащая символ системы счисления, затем опциональная часть двоичной экспоненты
INF
или INFINITY
с игнорированием регистра
NAN
с игнорированием регистра ![]() | Согласно стандарту POSIX, данные функции могут дополнительно анализировать «последовательность из n символов» после NAN . ЗОСРВ «Нейтрино» не интерпретирует данную n-символьную последовательность, и результат работы функции эквивалентен указанию NAN без n-символьной последовательности. |
Преобразование заканчивается на первом нераспознанном символе. Если endptr не равен NULL, указатель на первый нераспознанный символ сохраняется в endptr.
Преобразованное значение. Если корректное значение вызовет переполнение, возвращается плюс или минус HUGE_VAL
, а errno устанавливается в ERANGE
. Если корректное значение вызовет потерю значимости, то возвращается нуль, а errno устанавливается в ERANGE
.
![]() | Данные функции возвращают нуль и устанавливают errno, если входную строку нельзя преобразовать; функции не меняют errno, если ошибок не возникло. Если требуется проверить возникновение ошибок, следует установить для errno значение 0 , вызвать функцию, а затем снова проверить errno. |
#include <stdio.h>#include <stdlib.h>int main( void ){double pi;pi = strtod( "3.141592653589793", NULL );printf( "pi=%17.15f\n",pi );return (EXIT_SUCCESS);}
ANSI, POSIX 1003.1
Предыдущий раздел: Описание API системной библиотеки