_atodbl, _atodbl_l, _atoldbl, _atoldbl_l, _atoflt, _atoflt_l

将字符串转换为双精度型 (_atodbl)、长双精度型 (_atoldbl) 或浮点型 (_atoflt)。

语法

int _atodbl( _CRT_DOUBLE * value, char * str );
int _atodbl_l ( _CRT_DOUBLE * value, char * str, _locale_t locale );
int _atoldbl( _LDOUBLE * value, char * str );
int _atoldbl_l ( _LDOUBLE * value, char * str, _locale_t locale );
int _atoflt( _CRT_FLOAT * value, const char * str );
int _atoflt_l( _CRT_FLOAT * value, const char * str, _locale_t locale );

参数

value
通过将字符串转换为浮点值生成的双精度型、长双精度型或浮点型值。 这些值都包装在一个结构中。

str
要解析的字符串将转换为浮点值。

locale
要使用的区域设置。

返回值

如果成功,则返回 0。 可能的错误代码是 _UNDERFLOW_OVERFLOW,它们在头文件 <math.h> 中定义。

备注

这些函数将字符串转换为浮点值。 这些函数和 atof 系列函数之间的区别是:这些函数不会生成浮点代码,也不会导致硬件异常。 改为将错误条件报告为错误代码。

如果字符串没有作为浮点值的有效解释,则 value 会设为零,且返回值为零。

这些带有 _l 后缀的函数的版本与不带有该后缀的函数版本相同,只不过前者使用传入的 locale 参数而不是当前的线程区域设置。

默认情况下,此函数的全局状态范围限定为应用程序。 要更改此行为,请参阅 CRT 中的全局状态

要求

例程 必需的标头
_atodbl, _atoldbl, _atoflt

_atodbl_l, _atoldbl_l, _atoflt_l
<stdlib.h>

示例

// crt_atodbl.c
// Uses _atodbl to convert a string to a double precision
// floating point value.

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

int main()
{
   char str1[256] = "3.141592654";
   char abc[256] = "abc";
   char oflow[256] = "1.0E+5000";
   _CRT_DOUBLE dblval;
   _CRT_FLOAT fltval;
   int retval;

   retval = _atodbl(&dblval, str1);

   printf("Double value: %lf\n", dblval.x);
   printf("Return value: %d\n\n", retval);

   retval = _atoflt(&fltval, str1);
   printf("Float value: %f\n", fltval.f);
   printf("Return value: %d\n\n", retval);

   // A non-floating point value: returns 0.
   retval = _atoflt(&fltval, abc);
   printf("Float value: %f\n", fltval.f);
   printf("Return value: %d\n\n", retval);

   // Overflow.
   retval = _atoflt(&fltval, oflow);
   printf("Float value: %f\n", fltval.f);
   printf("Return value: %d\n\n", retval);

   return 0;
}
Double value: 3.141593
Return value: 0

Float value: 3.141593
Return value: 0

Float value: 0.000000
Return value: 0

Float value: inf
Return value: 3

另请参阅

数据转换
数学和浮点支持
区域设置
atof_atof_l_wtof_wtof_l