<分区>
我有一个存储十进制值的字符串,例如“0.10”。我想将其转换为 float 。但是当我用atof来做的时候,得到的数字并不完全是它应该有的值。我正在编写一些涉及十进制值的一些数字运算的复杂算法,所以这会影响我的最终结果。
这是描述我遇到的问题的一些简单代码。这里我只是简单的把一个十进制值放到一个字符串中,用atof转成float,用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++ 编译器。可能是这个编译器的错误导致了这个问题吗?如果是这样,是否有任何其他方法可以将值转换为 float 并获得正确的值?谢谢。
编辑:虽然该问题部分解释了为什么会发生这种情况,但它没有给出完整的值(value),它只提供了一个可能有效也可能无效的解决方案。因此,我认为将这个问题作为一个单独的问题悬而未决是有效的。