atof
, , _atof_l
_wtof
_wtof_l
Преобразуют строку в двойное значение.
Синтаксис
double atof(
const char *str
);
double _atof_l(
const char *str,
_locale_t locale
);
double _wtof(
const wchar_t *str
);
double _wtof_l(
const wchar_t *str,
_locale_t locale
);
Параметры
str
Строка для преобразования.
locale
Используемый языковой стандарт.
Возвращаемое значение
Каждая функция возвращает значение double
, которое создается за счет интерпретации входных символов как числа. Возвращаемое значение равно 0,0, если входные данные не могут быть преобразованы в значение этого типа.
Во всех случаях, когда диапазон не соблюдается, errno
принимает значение ERANGE
. Если параметр передан NULL
, вызывается обработчик недопустимых параметров, как описано в разделе проверки параметров. Если продолжение выполнения разрешено, эти функции устанавливают для errno
значение EINVAL
и возвращают 0.
Замечания
Эти функции преобразуют строку символов в значение двойной точности с плавающей запятой.
Входная строка представляет собой последовательность символов, которые могут обрабатываться как числовое значение указанного типа. Функция перестает считывать входную строку на первом символе, который не может распознаваться как часть числа. Этот символ может быть нуль-символом ("\0" или L"\0"), которым завершается строка.
Аргумент str
для atof
и _wtof
принимает следующую форму:
[whitespace
] [sign
]digits
[]digits
.
[ {E
| e
}[sign
]]digits
A whitespace
состоит из пробелов или символов табуляции, которые игнорируются; sign
является плюсом (+) или минусом (-); и digits
являются одним или несколькими десятичными цифрами. Если перед десятичной запятой никаких цифр нет, после нее должен отображаться хотя бы один символ. За десятичными цифрами может следовать показатель степени, который состоит из вводной буквы (e
или E
), и, при необходимости, целого десятичного числа со знаком.
Версии UCRT этих функций не поддерживают преобразование букв стилей Фортрана (d
или D
) экспонентов. Это нестандартное расширение поддерживалось в более ранних версиях CRT и может оказаться критическим изменением для вашего кода.
Версии этих функций с суффиксом _l
идентичны, за исключением того, что они используют locale
параметр, переданный вместо текущего языкового стандарта.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Сопоставления подпрограмм универсального текста
TCHAR.H рутина |
_UNICODE и _MBCS не определен |
_MBCS Определенные |
_UNICODE Определенные |
---|---|---|---|
_tstof |
atof |
atof |
_wtof |
_ttof |
atof |
atof |
_wtof |
Требования
Routine(s) | Обязательный заголовок |
---|---|
atof , _atof_l |
C: или <stdlib.h> C++: <cstdlib> <math.h> , <stdlib.h> <cmath> или<math.h> |
_wtof , _wtof_l |
C: или C++: <stdlib.h> <cstdlib> <stdlib.h> или <wchar.h> <wchar.h> |
Пример
Эта программа показывает, как числа, хранящиеся в виде строки, можно преобразовать в числовые значения с помощью функции atof
и _atof_l
.
// crt_atof.c
//
// This program shows how numbers stored as
// strings can be converted to numeric
// values using the atof and _atof_l functions.
#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
int main(void)
{
char *str = NULL;
double value = 0;
_locale_t fr = _create_locale(LC_NUMERIC, "fr-FR");
// An example of the atof function
// using leading and training spaces.
str = " 3336402735171707160320 ";
value = atof(str);
printf("Function: atof(\"%s\") = %e\n", str, value);
// Another example of the atof function
// using the 'E' exponential formatting keyword.
str = "3.1412764583E210";
value = atof(str);
printf("Function: atof(\"%s\") = %e\n", str, value);
// An example of the atof and _atof_l functions
// using the 'e' exponential formatting keyword
// and showing different decimal point interpretations.
str = " -2,309e-25";
value = atof(str);
printf("Function: atof(\"%s\") = %e\n", str, value);
value = _atof_l(str, fr);
printf("Function: _atof_l(\"%s\", fr)) = %e\n", str, value);
}
Function: atof(" 3336402735171707160320 ") = 3.336403e+21
Function: atof("3.1412764583E210") = 3.141276e+210
Function: atof(" -2,309e-25") = -2.000000e+00
Function: _atof_l(" -2,309e-25", fr)) = -2.309000e-25
См. также
Преобразование данных
Поддержка математических и плавающих точек
Локаль
_ecvt
_fcvt
_gcvt
setlocale
, _wsetlocale
_atodbl
, , _atodbl_l
_atoldbl_l
_atoldbl
_atoflt
,_atoflt_l