_atodbl, _atodbl_l, _atoldbl, _atoldbl_l, _atoflt _atoflt_l
div
eof
TOC
Collapse the table of content
Expand the table of content
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here. ArchiveDisclaimer

_atodbl, _atodbl_l, _atoldbl, _atoldbl_l, _atoflt _atoflt_l

Converts a string to a double (_atodbl), long double (_atoldbl), or float (_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,
   char * str
);
int _atoflt_l(
   _CRT_FLOAT * value,
   char * str,
   locale_t locale
);

value

The double, long double, or float value produced by converting the string to a floating-point value. These values are wrapped in a structure.

str

The string to be parsed to convert into a floating-point value.

locale

The locale to use.

Returns 0 if successful; possible error codes are _UNDERFLOW or _OVERFLOW, defined in the header file Math.h.

These functions convert a string to a floating-point value. The difference between these functions and the atof family of functions is that these functions do not generate floating-point code and hence do not result in hardware exceptions. Instead, error conditions are reported as an error code.

If a string does not have a valid interpretation as a floating-point value, value is set to zero and the return value is zero.

The versions of these functions with the _l suffix are identical except that they use the locale parameter passed in instead of the current thread locale.

Routines

Required header

_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: 1.#INF00 Return value: 3
Show:
© 2016 Microsoft