strtod() function in C/C++ (original) (raw)
Last Updated : 21 Aug, 2018
The strtod() is a builtin function in C and C++ STL which interprets the contents of the string as a floating point number and return its value as a double. It sets a pointer to point to the first character after the last valid character of the string, only if there is any, otherwise it sets the pointer to null.Syntax:
double strtod(str, &end)
Parameters:str: It specifies the string which has the representation of a floating point number.end: It is specified the parameter that refers to an already allocated object of type char*.Return Value: It returns a double value, which is converted from a string, and 0, if no valid conversion can be performed. Below programs illustrate the above function:Program 1:
CPP `
// C++ program to illustrate the // strtod() function #include #include
using namespace std;
int main() { char str[] = "11.03e 0mn"; char* end; double number;
number = strtod(str, &end);
cout << "number = " << str << endl;
cout << "double = " << number << endl;
cout << "end string = " << end << endl;
return 0;
}
`
Output:
number = 11.03e 0mn double = 11.03 end string = e 0mn
Program 2:
CPP `
// C++ program to illustrate the // strtod() function without trailing characters #include #include
using namespace std;
int main() { char str[] = "4.06"; char* end; double number;
number = strtod(str, &end);
cout << "number= " << str << endl;
cout << "double= " << number << endl;
// If end is not Null
if (*end) {
cout << end;
}
// If end is Null
else {
cout << "null";
}
return 0;
}
`
Output:
number= 4.06 double= 4.06 null
Program 3: strtod() function with exponents and hexadecimals
CPP `
// C++ program to illustrate the // strtod() function with exponents and hexadecimals #include #include #include
using namespace std; int main() { // initialize a exponential value char str[] = "-89.04e-3win gfg"; char* end; double number;
number = strtod(str, &end);
cout << "str = " << str << endl;
cout << "double = " << number << endl;
cout << "end string = " << end << endl
<< endl;
// initialize a new hexadecimal value
strcpy(str, "1998gupta.1204ishwar");
number = strtod(str, &end);
cout << "str = " << str << endl;
cout << "double = " << number << endl;
cout << "end string = " << end << endl;
return 0;
}
`
Output:
str = -89.04e-3win gfg double = -0.08904 end string = win gfg
str = 1998gupta.1204ishwar double = 1998 end string = gupta.1204ishwar
Program 4:
CPP `
// C++ program to illustrate the // strtod() function for Infinity and NaN #include #include
using namespace std;
int main() { char* end;
cout << "Infinity"
<< " to double = "
<< strtod("infinity", &end) << endl;
cout << "end string = " << end << endl
<< endl;
cout << "Infpqrs"
<< " to double = " <<
strtod("Infpqrs", &end) << endl;
cout << "end string = " << end << endl
<< endl;
cout << "NaN11x"
<< " to double = "
<< strtod("NaN11x", &end) << endl;
cout << "end string = " << end << endl
<< endl;
return 0;
}
`
Output:
Infinity to double = inf end string =
Infpqrs to double = inf end string = pqrs
NaN11x to double = nan end string = 11x
Program 5: strtod() function with leading whitespace
CPP `
// C++ program to illustrate the // strtod() function with leading whitespace #include #include
using namespace std;
int main() { char* end;
cout << "99.99"
<< " to double = "
<< strtod(" 19.99", &end) << endl;
// end pointer is set to null
cout << "end string = "
<< end << endl
<< endl;
// Returns 0 because of invalid conversion
cout << "xyz1.80"
<< " to double = "
<< strtod("xyz1.80", &end) << endl;
cout << "end string = " << end << endl
<< endl;
return 0;
}
`
Output:
99.99 to double = 19.99 end string =
xyz1.80 to double = 0 end string = xyz1.80