Open In App

strtod() function in C/C++

Last Updated : 21 Aug, 2018
Comments
Improve
Suggest changes
Like Article
Like
Report
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 <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;
}
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 <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;
}
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 <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;
}
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 <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;
}
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 <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;
}
Output:
99.99 to double = 19.99
end string = 

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

Next Article
Practice Tags :

Similar Reads