Есть ли функция, аналогичная atoi, которая преобразует строку в float вместо целого?
Как atoi, но плавать
Ответ 1
(или std::atof()
говорить С++ - спасибо jons34yp)
Ответ 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);
Ответ 11
В качестве альтернативы всем вышеизложенным вы можете использовать поток строк. http://cplusplus.com/reference/iostream/stringstream/