strtod(3c) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

strtod(3c)

strtod(3C)               Standard C Library Functions               strtod(3C)

NAME
       strtod, strtof, strtold, atof - convert string to floating-point number

SYNOPSIS
       #include <stdlib.h>

       double strtod(const char *restrict nptr, char **restrict endptr);


       float strtof(const char *restrict nptr, char **restrict endptr);


       long double strtold(const char *restrict nptr, char **restrict endptr);


       double atof(const char *str);

DESCRIPTION
       The  strtod(),  strtof(),  and  strtold() functions convert the initial
       portion of the string pointed to by nptr to  double,  float,  and  long
       double  representation,  respectively.  First  they decompose the input
       string into three parts:

           1.     An initial, possibly empty, sequence of white-space  charac‐
                  ters (as specified by isspace(3C))


           2.     A  subject sequence interpreted as a floating-point constant
                  or representing infinity or NaN


           3.     A final string of one or more unrecognized  characters,  in‐
                  cluding the terminating null byte of the input string.




       Then  they  attempt to convert the subject sequence to a floating-point
       number, and return the result.


       The expected form of the subject sequence is an optional plus or  minus
       sign, then one of the following:

           o      A non-empty sequence of digits optionally containing a radix
                  character, then an optional exponent part


           o      A  0x or 0X, then a non-empty sequence of hexadecimal digits
                  optionally containing a radix character,  then  an  optional
                  binary exponent part


           o      One of INF or INFINITY, ignoring case


           o      One  of  NAN  or NAN(n-char-sequence(opt)), ignoring case in
                  the NAN part, where:

                    n-char-sequence:
                        digit
                        nondigit
                        n-char-sequence digit
                        n-char-sequence nondigit




       In  default  mode  for  strtod(),  only  decimal,   INF/INFINITY,   and
       NAN/NAN(n-char-sequence) forms are recognized. In C99/SUSv3 mode, hexa‐
       decimal strings are also recognized.


       In default mode for strtod(), the n-char-sequence in the NAN(n-char-se‐
       quence)  form  can contain any character except ')' (right parenthesis)
       or '\0' (null). In C99/SUSv3 mode, the n-char-sequence can contain only
       upper and lowercase letters, digits, and '_' (underscore).


       The strtof() and strtold() functions always function in  C99/SUSv3-con‐
       formant mode.


       The  subject  sequence is defined as the longest initial subsequence of
       the input string, starting with the  first  non-white-space  character,
       that  is of the expected form. The subject sequence contains no charac‐
       ters if the input string is not of the expected form.


       If the subject sequence has the expected form for a floating-point num‐
       ber, the sequence of characters starting with the first  digit  or  the
       decimal-point  character  (whichever  occurs first) is interpreted as a
       floating constant of the C language, except that the radix character is
       used in place of a period, and that if neither an exponent part  nor  a
       radix character appears in a decimal floating-point number, or if a bi‐
       nary exponent part does not appear in a hexadecimal floating-point num‐
       ber,  an  exponent  part of the appropriate type with value zero is as‐
       sumed to follow the last digit in the string. If the  subject  sequence
       begins  with  a  minus  sign, the sequence is interpreted as negated. A
       character sequence INF or INFINITY is interpreted  as  an  infinity.  A
       character sequence NAN or NAN(n-char-sequence(opt)) is interpreted as a
       quiet  NaN.  A  pointer  to  the  final  string is stored in the object
       pointed to by endptr, provided that endptr is not a null pointer.


       If the subject sequence has either the decimal or hexadecimal form, the
       value resulting from the conversion is rounded correctly  according  to
       the  prevailing  floating-point rounding direction mode. The conversion
       also raises floating-point inexact, underflow, or  overflow  exceptions
       as appropriate.


       The radix character is defined in the program's locale (category LC_NU‐
       MERIC).  In  the POSIX locale, or in a locale where the radix character
       is not defined, the radix character defaults to a period ('.').


       If the subject sequence is empty or does not have the expected form, no
       conversion is performed; the value of nptr  is  stored  in  the  object
       pointed to by endptr, provided that endptr is not a null pointer.


       The  strtod() function does not change the setting of errno if success‐
       ful.


       The  atof(str)  function  call  is  equivalent  to  strtod(nptr,  (char
       **)NULL).

RETURN VALUES
       Upon successful completion, these functions return the converted value.
       If no conversion could be performed, 0 is returned.


       If  the  correct  value  is  outside the range of representable values,
       ±HUGE_VAL, ±HUGE_VALF, or ±HUGE_VALL is returned (according to the sign
       of the value), a floating-point overflow exception is raised, and errno
       is set to ERANGE.


       If the correct value would cause an underflow,  the  correctly  rounded
       result  (which may be normal, subnormal, or zero) is returned, a float‐
       ing-point underflow exception is raised, and errno is set to ERANGE.

ERRORS
       These functions will fail if:

       ERANGE    The value to be returned would cause overflow or underflow



       These functions may fail if:

       EINVAL    No conversion could be performed.


USAGE
       Since 0 is returned on error and is also a valid return on success,  an
       application  wishing  to check for error situations should set errno to
       0, then call strtod(), strtof(), or strtold(), then check errno.


       The changes to strtod() introduced by the ISO/IEC 9899:  1999  standard
       can  alter  the behavior of well-formed applications complying with the
       ISO/IEC 9899: 1990 standard and  thus  earlier  versions  of  IEEE  Std
       1003.1-2008. One such example would be:

         int
         what_kind_of_number (char *s)
         {
              char *endp;
              double d;
              long l;
              d = strtod(s, &endp);
              if (s != endp && *endp == '\0')
                  printf("It's a float with value %g\n", d);
              else
              {
                  l = strtol(s, &endp, 0);
                  if (s != endp && *endp == '\0')
                      printf("It's an integer with value %ld\n", 1);
                  else
                      return 1;
              }
              return 0;
         }



       If the function is called with:

         what_kind_of_number ("0x10")



       an  ISO/IEC  9899:  1990  standard-compliant library will result in the
       function printing:

         It's an integer with value 16



       With the ISO/IEC 9899: 1999 standard, the result is:

         It's a float with value 16



       The change in behavior is due to the inclusion of  floating-point  num‐
       bers  in  hexadecimal  notation without requiring that either a decimal
       point or the binary exponent be present.

ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:

       tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE  TYPEAT‐
       TRIBUTE VALUE _ CSIEnabled _ Interface StabilityCommitted _ MT-LevelMT-
       Safe _ StandardSee standards(7).


SEE ALSO
       strtol(3C),  isspace(3C), localeconv(3C), scanf(3C), setlocale(3C), at‐
       tributes(7), standards(7)

Oracle Solaris 11.4               11 May 2021                       strtod(3C)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3