我有一个存储十进制值的字符串,例如“0.10”。我想将其转换为浮点数。但是当我使用 atof 来做这件事时,我得到的数字并不完全是它应该的值。我正在编写一些复杂的算法,涉及对十进制值进行一些数字处理,所以这让我的最终结果无法接受。
这是一些描述我遇到的问题的简单代码。在这里,我只是简单地将一个十进制值放入一个字符串中,然后用 atof 将其转换为浮点数,然后用 cout 将其打印出来。我得到的结果表明 atof 正在向最终值添加一个很小的十进制数。
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
int main()
{
string value = "0.10";
float valueAsFloat = atof(value.c_str());
cout.precision(20);
cout << valueAsFloat << endl;
return 0;
}
输出是:
0.10000000149011611938
有任何想法吗?我在 Ubuntu 上使用 GNU g++ 编译器。会不会是这个编译器的错误导致了这个问题?如果是这样,还有其他方法可以将值转换为浮点数并获得正确的值吗?谢谢。
编辑:虽然这个问题对为什么会发生这种情况给出了部分解释,但它并没有给出完整的价值,它只提供了一个可能有效也可能无效的单一解决方案。因此,我认为将这个问题作为一个单独的问题开放是有效的。