Функции
strtod,
strtof,
и
strtold
преобразуют начальную часть строки, на которую указывает
nptr
, соответственно в числа типа
double,
float,
и
long double .
Ожидаемый вид строки (ее начальная часть) - это несколько пробелов,
распознаваемых функцией isspace(3), возможно знаки
плюс (``+'') или минус (``-''), а затем либо (i) десятичное число,
либо (ii) шестнадцатеричное число, либо (iii) бесконечность,
либо (iv) нечисловое значение (NAN - not-a-number).
Десятичное число
состоит из непустной последовательности цифр от 0 до 9, возможно содержащей
символ дробного разделителя (десятичная точка, зависит от настройки локали;
обычно это символ точки - ``.''), возможно с последующей десятичной экспонентой.
Десятичная экспонента состоит из символа ``E'' или ``e'', далее возможен знак
плюс или минус, а затем непустая последовательность десятичных цифр, означающая
умножение всей начальной части на 10 в указанной степени.
Шестнадцатеричное число
состоит из символов ``0x'' или ``0X'' с последующей непустой последовательностью
из шестнадцатеричных цифр, возможно содержащей символ дробного разделителя, далее может
следовать двоичная экспонента. Двоичная экспонента состоит из символа ``P'' или ``p'',
далее, возможно, знака плюс или минус, и непустой последовательности десятичных цифр,
обозначающих умножение всего начального числа на 2 в указанной степени.
По меньшей мере должен быть указан либо символ дробного разделителя либо бинарная экспонента.
Бесконечноть
- это либо значение ``INF'' либо ``INFINITY'', независимо от режима символов.
Нечисловое значение (NAN)
- это значение ``NAN'' (не зависимо от режима символов), возможно сопровождаемое `(',
последовательностью символов, и затем ')'.
Последовательность символов определяет тип нечислового значения в зависимости от
текущей представления NAN в системе.
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Функции возвращают преобразованное значение, если таковое существует.
Если
endptr
не равно
NULL,
то указатель на символ, следующий за последним обработанным символом,
сохраняется в
endptr.
Если не производится никаких преобразований, то возвращается ноль, а значение
nptr
сохраняется в той позиции, на которую ссылается
endptr.
Если правильное значение вызовет "переполнение" (overflow), то возвращается
значение плюс или минус
HUGE_VAL
(HUGE_VALF,
HUGE_VALL)
(в зависимости от знака величины), а
ERANGE
записывается в переменную
errno.
Если правильное значение будет настолько маленьким, что им
можно будет пренебречь, то возвращается ноль,
а переменной
errno
присваивается значение
ERANGE.
НАЙДЕННЫЕ ОШИБКИ
ERANGE:
величина оказалась слишком большой или очень маленькой.
СООТВЕТСТВИЕ СТАНДАРТАМ
ANSI C описывает функцию
strtod,
а стандарт C99
описывает остальные две функции.