std::strtof, std::strtod, std::strtold
| Определён в заголовочном файле <cstdlib>
|
||
| float strtof( const char* str, char** str_end ); |
(начиная с C++11) | |
| double strtod( const char* str, char** str_end ); |
||
| long double strtold( const char* str, char** str_end ); |
(начиная с C++11) | |
Преобразует однобайтовую строку, на которую указывает str в число с плавающей запятой.
Функция отбрасывает пробельные символы (определяемые с помощью std::isspace()), пока не будет найден первый непробельный символ. Затем из строки извлекаются символы, необходимые для формирования корректного представления числа с плавающей точкой и преобразуются в непосредственное значение данного числа. Допустимое значение числа с плавающей точкой может быть одним из следующих:
- десятичное выражение числа с плавающей точкой. Оно состоит из следующих частей:
- (необязательно) знак плюс или минус
- непустая последовательность десятичных цифр, которая может в необязательном порядке содержать десятичный разделитель (определяет мантиссу)
- (необязательно) символ
eилиE, за которым следует необязательный знак минус или плюс и непустая последовательность десятичных цифр (определяет экспоненту)
- двоичное выражение числа с плавающей точкой. Оно состоит из следующих частей:
- (необязательно) знак плюс или минус
-
0xили0X - непустая последовательность шестнадцатеричных цифр, которая может в необязательном порядке содержать десятичный разделитель (определяет мантиссу)
- (необязательно) символ
pилиP, за которым следует необязательный знак минус или плюс и непустая последовательность шестнадцатеричных цифр (определяет экспоненту)
- выражение бесконечности. Оно состоит из следующих частей:
- (необязательно) знак плюс или минус
-
INFилиINFINITYбез учета регистра
- выражение NaN (Not-a-Number). Оно состоит из следующих частей:
- (необязательно) знак плюс или минус
-
NANилиNAN(последовательность_символов)без учета регистра символовNAN. последовательность_символов может содержать только буквенно-цифровые символы. Результатом будет значение с плавающей точкой, т.н. тихий NaN (quiet NaN)
Функция устанавливает указатель str_end так, чтобы он указывал на символ, который был следующий за последним используемым в формировании записи числа. Если str_end равен NULL, то он игнорируется.
Содержание |
[править] Параметры
| str | — | Указатель на однобайтовую нульзавершённую строку, из которой нужно извлечь число с плавающей запятой. |
| str_end | — | Двойной указатель на символ. |
[править] Возвращаемое значение
В случае успеха возвращается значение числа с плавающей запятой, соответствующее содержимому str. Если сконвертированное значение не входит в диапазон требуемого типа, то возникает ошибка диапазона, и тогда возвращается HUGE_VAL, HUGE_VALF или HUGE_VALL. Если никакое преобразование не может быть совершено, то возвращается 0 и *str_end устанавливается равным str.
[править] Пример
#include <iostream> #include <string> #include <cerrno> #include <cstdlib> int main() { const char* p = "111.11 -2.22 0X1.BC70A3D70A3D7P+6 1.18973e+4932zzz"; char* end; std::cout << "Распознаём \"" << p << "\":\n"; for (double f = std::strtod(p, &end); p != end; f = std::strtod(p, &end)) { std::cout << "'" << std::string(p, end-p) << "' -> "; p = end; if (errno == ERANGE){ std::cout << "Ошибка диапазона, получили "; errno = 0; } std::cout << f << '\n'; } }
Вывод:
Распознаём "111.11 -2.22 0X1.BC70A3D70A3D7P+6 1.18973e+4932zzz": '111.11' -> 111.11 ' -2.22' -> -2.22 ' 0X1.BC70A3D70A3D7P+6' -> 111.11 ' 1.18973e+4932' -> Ошибка диапазона, получили inf
[править] См. также
| Преобразует однобайтовую строку в значение числа с плавающей запятой (функция) | |
| Преобразует строку широких значение с плавающей точкой Оригинал: converts a wide string to a floating point value Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция) | |
| Справка по C — strtof, strtod, strtold
| |

