C++ stof()和stod()精度

C++ stof()和stod()精度,c++,floating-point,C++,Floating Point,我正在解析一个带有数字的文件。我试图把数字从字符串转换为浮点或双,但是我发现了STOF和STOD的精度问题,它们在VS C++中被少量地删除。比如说 string str1="3.14", str2="45.106"; double number1, number2; number1=stod(str1); number2=stof(str2); 当我测试(number1==3.14)时,它返回“false”。当我在调试器中查看时,数字1实际上是3.13999999或类似的东西!数字2可能是4

我正在解析一个带有数字的文件。我试图把数字从字符串转换为浮点或双,但是我发现了STOF和STOD的精度问题,它们在VS C++中被少量地删除。比如说

string str1="3.14", str2="45.106";
double number1, number2;
number1=stod(str1);
number2=stof(str2);

当我测试(number1==3.14)时,它返回“false”。当我在调试器中查看时,数字1实际上是3.13999999或类似的东西!数字2可能是45.1060000002或类似的数字。有任何解释或解决方案吗?

您可能希望看看这个示例:

从中可以学到的是,在两个浮点数之间进行直接比较几乎从来都不是解决方案。浮点数只有一定的精度,因此可以预期的精度是有限制的,这一点很好地放在Zeta评论中的链接中。

解释:。使用浮点类型的相等比较时需要小心。