#include <stdlib.h> double atof(const char *p);
atof
converts the character string p
to a double-precision,
floating-point number after skipping any leading white space (such as
blanks, tabs, and new-line characters). The conversion stops at the
first unrecognized character.
The argument string may contain a decimal point and may be followed by
an e
or an E
and a signed integer exponent. A leading minus
sign indicates a negative number. White space is not allowed between
the minus sign and the number or between the number and the exponent.
atof
returns a value of type double
. If no initial segment of
the string is a valid number, the return value is 0.
atof
.
If the floating-point value is outside the range of valid 370
floating-point numbers, +-HUGE_VAL
is returned if the
correct value is too large, or 0.0 if the correct value is too close to 0.
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <ctype.h> main() { char input[80]; int int_format; long int_value; double dbl_value; puts("Enter a valid C numeric constant (without any suffixes)"); gets(input); /* If there's a decimal point, it's a double. */ if (strchr(input, '.')) int_format = 0; /* If it starts 0x, it's an integer. */ else if((input[0] == '0' && tolower(input[1]) == 'x') || ((input[0] == '+' || input[0] == '-') && input[1] == '0' && tolower(input[2]) == 'x')) int_format = 1; /* If it has an E and isn't hex, it's a double. */ else if (strpbrk(input, "eE")) int_format = 0; /* Doubles must have either "." or "e". */ else int_format = 1; /* Convert to integer (errors ignored). */ if (int_format) { int_value = strtol(input, NULL, 0); printf("Your input appears to be the integer %dn", int_value); } /* Convert to double (errors ignored). */ else { dbl_value = atof(input); printf("Your input appears to be the double %.16gn", dbl_value); } exit(0); }
strtod
Copyright (c) 1998 SAS Institute Inc. Cary, NC, USA. All rights reserved.