Поделиться через


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, _atoldbl_l, _atoflt, _atoflt_l