喜欢atoi但是漂浮

时间:2011-02-16 13:26:47

标签: c++ casting atoi

是否有类似atoi的函数将字符串转换为float而不是整数?

11 个答案:

答案 0 :(得分:17)

atof()

(或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/