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 等效项
请参见
参考
strtol, wcstol, _strtol_l, _wcstol_l
strtoul, _strtoul_l, wcstoul, _wcstoul_l