是否有类似atoi的函数将字符串转换为float而不是整数?
答案 0 :(得分:17)
(或std::atof()
谈论C ++ - 感谢jons34yp)
答案 1 :(得分:17)
boost::lexical_cast<float>(str);
此模板函数包含在热门的Boost库集合中,如果您对C ++非常认真,可以了解它们。
答案 2 :(得分:17)
将字符串转换为任何类型(默认可构造且可流化):
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;
}
答案 3 :(得分:6)
strtof
来自手册页
strtod(),strtof()和strtold()函数分别将nptr指向的字符串的初始部分转换为double,float和long double表示。
(字符串的初始部分)的预期形式是可选的前导空格,由isspace(3)识别,可选加号('''')或减号('' - '')然后(i)十进制数,或(ii)十六进制数,或(iii)无穷大,或(iv)NAN(非数字)。
/ man page&gt;
atof将字符串转换为double(不是名称所暗示的浮点数。)
答案 4 :(得分:6)
作为已提及的std::strtof()
和boost::lexical_cast<float>()
的替代方案,引入了新的C ++标准
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>
)
答案 5 :(得分:1)
使用atof
中的stdlib.h
:
double atof ( const char * str );
答案 6 :(得分:1)
首选strtof()
。 atof()
未检测到错误。
答案 7 :(得分:1)
这也可行(但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
答案 8 :(得分:0)
#include <stdlib.h>
double atof(const char*);
还有strtod
。
答案 9 :(得分:0)
尝试使用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);
答案 10 :(得分:-1)
作为上述所有内容的替代方法,您可以使用字符串流。 http://cplusplus.com/reference/iostream/stringstream/