我似乎在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 似乎总是能正常工作。
样本输出
FOR:频率=“a30b30c40”
两种方法都可以正常工作,给我:
a - 0.30
b - 0.30
c - 0.40
FOR:频率=“a10b10c10d10e10f50”
使用atof()我得到:
a - 0.10
b - 0.10
c - 1000000000.00 !?
d - 1000000000.00 !?
e - 0.10
f - 0.50
而atoi() 正确地给了我这个:
a - 0.10
b - 0.10
c - 0.10
d - 0.10
e - 0.10
f - 0.50
ps 我不能使用 std::stod 因为 mingw...