c++ - atof 随机无法正常工作

标签 c++ atof g++4.8

我似乎遇到了一些奇怪的问题,atof() 函数无法正确转换某些值。对于相同的值,atoi() 完美运行。
这是我正在做的事情的一小段:

...
// frequencies is a std::string in format a10d50f20 etc. i.e. letter|frequency in %  
// 6 - 48 characters, always correctly formatted 
for (size_t i = 0; i < frequencies.size(); i+=3)
{
  // #1
  double percentage = atof(frequencies.substr(i+1, i+2).c_str()) / 100;
  // #2
  double percentage = static_cast<double>(atoi(frequencies.substr(i+1, i+2).c_str())) / 100;

  cout << frequencies[i] << " - " << percentage << endl;
}
...

由于某些奇怪的原因,只有方法 #2 似乎总是能正常工作。

示例输出

对于:频率=“a30b30c40”

两种方法都能正常工作,给我:
一 - 0.30
b - 0.30
c - 0.40

对于:频率=“a10b10c10d10e10f50”

使用 atof() 我得到:
一 - 0.10
b - 0.10
c - 1000000000.00 !?
d - 1000000000.00 !?
e - 0.10
f - 0.50
atoi() 正确地 给了我这个:
一 - 0.10
b - 0.10
c - 0.10
d - 0.10
e - 0.10
f - 0.50

附注我不能使用 std::stod 因为 mingw...

最佳答案

substr 的第二个参数是长度,不是偏移量。

当您为 d 调用 substr(i+1, i+2) 时,您将获得字符串的全部剩余部分,然后将其解析为指数表示法10e10 即 10 * 1010

关于c++ - atof 随机无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23139006/

相关文章:

c - K&R 4.2 书中的 atof()

c++ - atof 只返回整数?

c++ - 如何在 C++ 代码中使用 CityHash128?

c++ - 如何仅删除/删除可执行文件(又名没有扩展名的文件)

c++ - 如何从 visual studio 2008 重新分发 vc++ 应用程序

java - 不满意的链接错误: dlopen failed: cannot locate symbol "atof"?

带有 g++ 4.7 和 4.8 : __int128 build errors 的 CUDA 5.5 RC

c++ - 简单参数包扩展 : expected ';'

c++ - 将标题放在项目的 "include"子目录中有什么好处吗?

具有父节点的二叉树的 C++ 复制构造函数