codebreaker
codebreaker

Reputation: 121

converting string to float in c++

What is the best way to convert a string to float(in c++), given that the string may be invalid. Here are the type of input

20.1

0.07

x

0

I used strtof which works quite well but the issue is it returns 0 both on error as well as when string "0" is passed into the function.

The code I am using is pretty simple

float converted_value = strtof(str_val.c_str(), NULL);
if (converted_value == 0) {
    return error;
}

Is there any way I could fix this code so I can differentiate between string 0 and error 0? what are the disadvantages if I use scanf?

Upvotes: 10

Views: 14527

Answers (3)

Cory Kramer
Cory Kramer

Reputation: 117866

C++11 actually has functions that do this now, in your case std::stof

Note that as far as handling your validation, it will throw an std::invalid_argument exception if the argument cannot be converted.

For completeness, here are more of such functions

std::stoi    // string to int
std::stol    // string to long
std::stoll   // string to long long
std::stof    // string to float
std::stod    // string to double
std::stold   // string to long double

Upvotes: 14

Bartek Banachewicz
Bartek Banachewicz

Reputation: 39370

Do neither and use stringstream.

std::stringstream s(str_val);

float f;
if (s >> f) {
    // conversion ok
} else {
    // conversion not ok
}

Upvotes: 0

Mark Ransom
Mark Ransom

Reputation: 308158

You do it by not ignoring the second parameter - it will tell you where the scanning stopped. If it's the end of the string then there wasn't an error.

char *ending;
float converted_value = strtof(str_val.c_str(), &ending);
if (*ending != 0) // error

Upvotes: 8

Related Questions