Назва
strtod, strtof, strtold - перетворює ASCII-ланцюжок на число з плаваючою точкою
Огляд
#include <stdlib.h>
double strtod(const char nptr, char endptr);
float strtof(const char nptr, char endptr);
long double strtold(const char nptr, char *endptr);**
Опис
Функції strtod, strtof і strtold перетворюють початкову частину ланцюжка, на який вказує nptr на double, float і long double представлення, відповідно.
Очікуваною формою (початкової частини) ланцюжка є можливий початковий пробіл, розпізнаний ?issapace(3), можливий знак плюсу ("+") або мінусу ("-"), а потім може слідувати десяткове число, або шістнадцяткове, або нескінченість, або ж NAN (не числове значення).
Десяткове число може складатися з неперервний ряду десяткових цифр з можливим позиційним розділювачем (radix character) (десятковий пункт є локалезалежним, як правило - "."), з можливою десятковою експонентою (показником степеня). Десяткова експонента може складатися з "E" або "e", з наступним можливим знаком плюсу або мінусу, після яких слідує низка десяткових чисел, і вказує множення на десятий степінь.
Шістнадцяткове число складається з "0x" або "0X", після якого слідує неперервний ряд шістнадцяткових цифер, з можливим позиційним розділювачем (radix character), з можливою двійковою експонентою. Бінарна експонента складається з "P" або "p", з наступним можливим знаком плюсу або мінусу, з наступною низкою десяткових чисел, і вказує множення на другий степінь. Принаймні або позиційний розділювач, або бінарна експонента повинні бути присутніми.
Нескінченність можна вказати як "INF" або "INFINITY", не зважаючи на регістр.
Нечислове значення можна вказати як "NAN" (не зважаючи на регістр), після чого може слідувати (', послідовність знаків і закриваюча
)'. Вказаний символьний ланцюжок - це залежний від втілення тип NAN.
Повернені значення
Ці функції повертають перетворене значення, якщо таке існує.
Якщо endptr не дорівнює NULL, покажчик на знак, розміщений після останнього використаного в перетворенні, буде збережено в місці, на яке вказує endptr.
Якщо не відбулося жодного перетворення, повертається нуль і значення nptr буде збережено в місці, на яке вказує endptr.
Якщо правильне значення викликає переповнення, повертається плюс або мінус із HUGE_VAL (HUGE_VALF, HUGE_VALL) (в залежності від знаку значення) і ERANGE буде збережено як значення errno. Якщо, навпаки, правильне значення викличе зникнення (underflow), повертається нуль і ERANGE буде збережено як значення errno.
Коди помилок
ERANGE : Відбулося переповнення або зникнення.
Відповідність стандартам
В ANSI C описано strtod, у C99 описано решту дві функції.