_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 后缀的函数版本与那些不带此后缀的函数版本相同,只不过它们使用传递的区域设置参数而不是当前线程区域设置。

要求

例程

必需的标头

_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;
}
  

请参见

参考

数据转换

浮点支持

区域设置

atof、_atof_l、_wtof、_wtof_l