Как atoi, но плавать

Есть ли функция, аналогичная atoi, которая преобразует строку в float вместо целого?

Ответ 2

boost::lexical_cast<float>(str);

Эта функция шаблона включена в популярную коллекцию библиотек Boost, о которой вы узнаете, если серьезно относитесь к С++.

Ответ 3

Преобразование строки в любой тип (по умолчанию - конструктивный и потоковый):

template< typename T >
T convert_from_string(const std::string& str)
{
  std::istringstream iss(str);
  T result;
  if( !(iss >> result) ) throw "Dude, you need error handling!";
  return result;
}

Ответ 4

strtof

На странице man

Функции strtod(), strtof() и strtold() преобразуют начальную часть строки, на которую указывает nptr, в double, float и long double, соответственно.

Ожидаемая форма строки (начальная часть) - это необязательное ведущее белое пространство, как распознано isspace (3), необязательный знак плюс ('+) или минус (' '-), а затем либо (i) десятичное число или (ii) шестнадцатеричное число или (iii) бесконечность или (iv) NAN (не-число).

/man page >

atof преобразует строку в двойную (а не float, как предполагало ее название).

Ответ 5

В качестве альтернативы уже упомянутым std::strtof() и boost::lexical_cast<float>(), новый стандарт С++ представил

float stof(const string& str, size_t *idx = 0);
double stod(const string& str, size_t *idx = 0);
long double stold(const string& str, size_t *idx = 0);

для строки проверки ошибок для конверсий с плавающей запятой. Оба GCC и MSVC поддерживают их (помните #include <string>)

Ответ 6

Используйте atof из stdlib.h:

double atof ( const char * str );

Ответ 7

Предпочитает strtof(). atof() не обнаруживает ошибок.

Ответ 8

Это также сработает (но C-код):

#include <iostream>

using namespace std;

int main()
{
float myFloatNumber = 0;
string inputString = "23.2445";
sscanf(inputString.c_str(), "%f", &myFloatNumber);
cout<< myFloatNumber * 100;

}

Смотрите здесь: http://codepad.org/qlHe5b2k

Ответ 9

#include <stdlib.h>
double atof(const char*);

Там также strtod.

Ответ 10

Попробуйте boost:: spirit: быстрый, безопасный тип и очень эффективный:

std::string::iterator begin = input.begin();
std::string::iterator end = input.end();
using boost::spirit::float_;

float val;
boost::spirit::qi::parse(begin,end,float_,val);