c++ - 62.0 == 62.0 返回 false,为什么?

标签 c++ casting compare type-conversion static-cast

我遇到了无法解决的恼人问题。我有这段代码片段:

LOG(INFO) << "totalTranslation: " << m_move.totalTranslation << " tileSize: " << static_cast<double>(tileSize);
if(m_move.totalTranslation >= static_cast<double>(tileSize)) {
    LOG(INFO) << "in!";
}

tileSize 等于 62(它是 int)。在循环中,我增加了 m_move.totalTranslation 值。问题是当m_move.totalTranslation 等于62 时,它不会进入if 语句。但是,如果它大于 62,它确实如此。查看生成的日志:

I0118 15:20:11.788576  5644 GameObject.cpp:270] totalTranslation: 61.008 tileSize: 62
I0118 15:20:11.806589  5644 GameObject.cpp:270] totalTranslation: 62 tileSize: 62
I0118 15:20:11.822602  5644 GameObject.cpp:270] totalTranslation: 62.93 tileSize: 62
I0118 15:20:11.822602  5644 GameObject.cpp:272] in!

如您所见,in! 仅在 totalTranslation 大于 62 时才会被记录。为什么?我以为可能是转换问题,但是我将这个int类型的tileSize转换为double,仍然没有区别。

最佳答案

对于 float 之间的相等性比较,由于 float 在计算机中的内部表示,因此优先看数字的接近程度。您可能需要检查数字是否在彼此之间的 epsilon 距离内。相等比较的结果取决于特定的编译器/机器。

也许您可以查看此以获取更多详细信息:http://www.parashift.com/c++-faq/floating-point-arith.html

关于c++ - 62.0 == 62.0 返回 false,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21205559/

相关文章:

c++ - ADO 不支持存储过程中的 XML

分配给较大宽度的整数时的 C 整数溢出行为

php - 将列字段中的值与列行中的值进行比较,并打印为选中和未选中的复选框

javascript - 比较 JS 中 2 个对象的属性集以找出哪些属性发生了变化以及发生了什么变化?

c - 我是否要转换 malloc 的结果?

mysql - 比较 MySQL 中的表数据

C++:如何从 lambda 获取 "un-capture"不可复制对象(例如 unique_ptr)?

c++ - 将 override 和 final 关键字与同一个成员函数一起使用有用吗?

c++ - 如何使用 QWhatsThis 在 Qt 中启用动态 whatsthis-string?

c++将字符串转换为参数中的LPCWSTR