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