喜欢atoi但是漂浮

lit*_*tuk 13 c++ casting atoi

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

RED*_*AIR 19

ATOF()

(或者std::atof()说C++ - 谢谢jons34yp)

  • @Glen:和`atoi`转换成`long`,那又怎样? (15认同)
  • @Glen,@ RED​​:虽然这个问题确实提到"浮动"(不是"浮动"),但它提到"整数"(不是"int"),因此使用"double"的答案应该没问题,这个答案仍然很糟糕,因为所有`atox()`函数都有内置缺陷,错误的字符串返回有效值.对于一个与它们一样糟糕的API函数. (5认同)
  • 并且不检查错误.穷人的功能. (4认同)
  • @Glen:你真的想要那3页解释为什么没有atof_float()?atof()是解决与atoi相当的问题的正确答案.问题不是:"还有其他函数可以从字符串转换为数字类型吗?". (4认同)

Fre*_*Foo 17

boost::lexical_cast<float>(str);
Run Code Online (Sandbox Code Playgroud)

这个模板函数包含在流行的Boost图书馆集合中,如果你认真对待C++,你需要了解它们.

  • 这需要下载和安装boost(apx.500 MB).你应该在答案中注意到.否则,C++新手会被混淆. (5认同)

sbi*_*sbi 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;
}
Run Code Online (Sandbox Code Playgroud)

  • _"我工作的地方,我们有自己的术语,用于未发明的Syndrom."_ (3认同)
  • 感谢您唯一的基于C++的解决方案!所有其他答案都是指C语言,但问题是标记为C++. (2认同)
  • @Mass:除了[larsmans的回答](http://stackoverflow.com/questions/5017001/like-atoi-but-to-float/5017054#5017054),这更优雅. (2认同)

Gle*_*len 6

strtof

从手册页

strtod(),strtof()和strtold()函数分别将nptr指向的字符串的初始部分转换为double,float和long double表示.

(字符串的初始部分)的预期形式是可选的前导空格,由isspace(3)识别,可选加号('''')或减号('' - '')然后(i) )十进制数,或(ii)十六进制数,或(iii)无穷大,或(iv)NAN(非数字).

/ man page>

atof将字符串转换为double(不是浮点数,因为它的名字会建议.)


Cub*_*bbi 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);
Run Code Online (Sandbox Code Playgroud)

用于错误检查字符串到浮点转换.GCC和MSVC都支持他们(记得#include <string>)