c++ - 将 float 与常量进行比较时的奇怪行为

标签 c++

我被这种奇怪的行为震惊了:

float pi = 3.14;

if(pi == 3.14)
    cout << "OK";
else
    cout << "How is it possible?";

谁能解释一下?

最佳答案

if 语句中的常量是(double)3.14。它非常接近其 float 版本,但不完全等于它,因为 3.14 未完全表示。

1.25 或任何其他可以精确表示的数字尝试相同的技巧,您将得到一个 OK

float num = 1.25;
if(num == 1.25)
    cout << "OK";
else
    cout << "How is it possible?";

您还可以将 3.14 转换为 float 以获得 OK:

float pi = 3.14;

if(pi == (float)3.14)
    cout << "OK";
else
    cout << "How is it possible?";

关于c++ - 将 float 与常量进行比较时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10839486/

相关文章:

c++ - Boost 能做什么而现代 C++ 不能?

c++ - 如何提高乘法的精度?

c++ - 列表容器 - 使用不相关的类型存储和移除

C++ 模板复制构造函数,编译器说 "passing const as this argument discards qualifiers"

c++ - 如何为文件对话框过滤器设置通配符?

使用头文件和实现文件的 C++ 类

c++ - 第三方类型是否应该在我的 C++ 库的 API 中公开

c++ - R 值似乎无法为未命名的临时对象提供不完整的支持,或者我在这里遗漏了什么?

c++ - 使用基类构造函数初始化子类

C++ 游戏 - 同时循环和按键