strtod() function in C/C++

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:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to illustrate the
// strtod() function
#include <cstdlib>
#include <iostream>
  
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;
}

chevron_right


Output:

number = 11.03e 0mn
double = 11.03
end string = e 0mn

Program 2:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to illustrate the
// strtod() function without trailing characters
#include <cstdlib>
#include <iostream>
  
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;
}

chevron_right


Output:

number= 4.06
double= 4.06
null

Program 3:
strtod() function with exponents and hexadecimals

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to illustrate the
// strtod() function with exponents and hexadecimals
#include <cstdlib>
#include <cstring>
#include <iostream>
  
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;
}

chevron_right


Output:

str = -89.04e-3win gfg
double = -0.08904
end string = win gfg

str = 1998gupta.1204ishwar
double = 1998
end string = gupta.1204ishwar

Program 4:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to illustrate the
// strtod() function for Infinity and NaN
#include <cstdlib>
#include <iostream>
  
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;
}

chevron_right


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

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to illustrate the
// strtod() function with leading whitespace
#include <cstdlib>
#include <iostream>
  
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;
}

chevron_right


Output:

99.99 to double = 19.99
end string = 

xyz1.80 to double = 0
end string = xyz1.80


My Personal Notes arrow_drop_up

Budding Web DeveloperKeen learnerAverage CoderDancer&Social Activist

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.




Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.