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
    要使用的区域设置。

返回值

除非表示形式导致溢出(在这种情况下,函数返回 +/-HUGE_VAL),否则 strtod 返回浮点数的值。 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 中基数字符的识别*;* 有关详细信息,请参阅 区域设置。 不带 _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