Пространства имён
Варианты
Действия

std::strtof, std::strtod, std::strtold

Материал из cppreference.com
< cpp‎ | string‎ | byte
Определено в заголовочном файле <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 documentation for strtof, strtod, strtold