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


strtod, _strtod_l, wcstod, _wcstod_l

Преобразуют строки к значению удвоенной точности.

double strtod(
   const char *nptr,
   char **endptr 
);
double _strtod_l(
   const char *nptr,
   char **endptr,
   _locale_t locale
);
double wcstod(
   const wchar_t *nptr,
   wchar_t **endptr 
);
double wcstod_l(
   const wchar_t *nptr,
   wchar_t **endptr,
   _locale_t locale
);

Параметры

  • nptr
    Строка, заканчивающаяся нулевым символом, для преобразования.

  • endptr
    Указатель на символ, который останавливает сканирование.

  • locale
    Используемый языковой стандарт.

Возвращаемое значение

strtod возвращает значение с плавающей запятой, за исключением тех случаев, когда такое представление вызывает переполнение, в этом случае функция возвращает +/–HUGE_VAL. Символ HUGE_VAL соответствует знаку значения, которое невозможно представить. strtod возвращает 0, если преобразование не может быть выполнено, или происходит потеря точности.

wcstod возвращает значения аналогично strtod. Для обеих функций errno присваивается значение ERANGE, если возникает переполнение или потеря точности и вызывается обработчик недопустимого параметра, как описано в разделе Проверка параметров.

См. раздел _doserrno, errno, _sys_errlist, and _sys_nerr для дополнительных сведений по этим и другим кодам возврата.

Заметки

Каждая функция преобразует входную строку nptr в double. Функция strtod преобразует nptr к значению двойной точности. strtod прекращает чтение строки nptr на первом знаке, который она не может распознать как часть числа. Это может быть конечный символ null. wcstod — это двухбайтовая версия strtod; её аргумент nptr — строка двухбайтовых символов. В остальном эти функции ведут себя идентично.

Универсальное текстовое сопоставление функций

Подпрограмма TCHAR.H

_UNICODE & _MBCS не определены

_MBCS определено

_UNICODE определено

_tcstod

strtod

strtod

wcstod

_tcstod_l

_strtod_l

_strtod_l

_wcstod_l

Параметр категории LC_NUMERIC текущего языкового стандарта определяет распознавание основания системы счисления в nptr*;* дополнительные сведения см. в разделе setlocale. Функции без суффикса _l используют текущий языковой стандарт; _strtod_l идентична _strtod_l за исключением того, что они используют переданный языковой стандарт. Для получения дополнительной информации см. Языковой стандарт.

Если endptr не равен NULL, то указатель на символ, из-за которого было прекращено сканирование, хранится в ячейке памяти, на которую указывает endptr. Если преобразование не может быть выполнено (допустимые цифры не были найдены, или было указано недопустимое основание), то значение nptr хранится в ячейке памяти, на которую указывает endptr.

strtod ожидает, что nptr указывает на строку следующей формы:

[whitespace] [sign] [digits] [.digits] [ {d | D | e | E}[sign]digits]

whitespace может включать в себя пробелы и знаки табуляции, которые игнорируются; sign — плюс (+) или минус (–); digits — одна или несколько десятичных цифр. Если перед символом системы счисления нет цифр, то после него должна быть хотя бы одна цифра. За десятичными цифрами может следовать Экспонента, которая состоит из вводной буквы (d, D, e или E) и, при необходимости, целого числа со знаком. Если нет ни экспоненциальной части, ни символа системы счисления, то предполагается, что символ системы счисления следует за последней цифрой в строке. Первый символ, который не удовлетворяет этой форме, прекращает сканирование.

Требования

Подпрограмма

Обязательный заголовок

strtod, _strtod_l

<stdlib.h>

wcstod, _wcstod_l

<stdlib.h> или <wchar.h>

Дополнительные сведения о совместимости см. в разделе Совместимость во введении.

Пример

// crt_strtod.c
// This program uses strtod to convert a
// string to a double-precision value; strtol to
// convert a string to long integer values; and strtoul
// to convert a string to unsigned long-integer values.
//

#include <stdlib.h>
#include <stdio.h>

int main( void )
{
   char   *string, *stopstring;
   double x;
   long   l;
   int    base;
   unsigned long ul;

   string = "3.1415926This stopped it";
   x = strtod( string, &stopstring );
   printf( "string = %s\n", string );
   printf("   strtod = %f\n", x );
   printf("   Stopped scan at: %s\n\n", stopstring );

   string = "-10110134932This stopped it";
   l = strtol( string, &stopstring, 10 );
   printf( "string = %s\n", string );
   printf("   strtol = %ld\n", l );
   printf("   Stopped scan at: %s\n\n", stopstring );

   string = "10110134932";
   printf( "string = %s\n", string );
 
   // Convert string using base 2, 4, and 8:
   for( base = 2; base <= 8; base *= 2 )
   {
      // Convert the string:
      ul = strtoul( string, &stopstring, base );
      printf( "   strtol = %ld (base %d)\n", ul, base );
      printf( "   Stopped scan at: %s\n", stopstring );
   }
}
  

Эквивалент в .NET Framework

System::Convert::ToDouble

См. также

Ссылки

Преобразование данных

Поддержка чисел с плавающей запятой

Интерпретация последовательностей в многобайтной кодировке

Языковой стандарт

Функции преобразования строк в числовое значение

strtol, wcstol, _strtol_l, _wcstol_l

strtoul, _strtoul_l, wcstoul, _wcstoul_l

atof, _atof_l, _wtof, _wtof_l

localeconv

_create_locale, _wcreate_locale

_free_locale