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
    转换的 null 终止的字符串。

  • endptr
    若要停止扫描字符的指针。

  • locale
    使用的区域设置。

返回值

strtod 返回浮点数的值,除此之外,,则表示可能导致溢出,,在函数返回 +/-HUGE_VAL情况下。 HUGE_VAL 的符号匹配不能表示值的符号。 strtod 返回 0; 如果转换不能执行或下溢时发生。

wcstod 类似将值返回给 strtod。 对于两个函数, errno 设置为 ERANGE ,如果溢出或下溢时发生,但无效参数调用处理程序,如 参数验证所述。

请参见 _doserrno、 errno、 _sys_errlist 和 _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 等效项

系统:: 转换:: 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