在我的代码中,我有大量的平等检查......
例如:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsLineItem* x = new QGraphicsLineItem(50, 50, -50, -50);
QGraphicsView view(new QGraphicsScene(-200, -150, 400, 300) );
view.scene()->addItem(x);
view.show();
bool sameLine = true;
QLineF line1 = x->line();
qreal _length = line1.length();
foreach(QGraphicsItem* item, view.scene()->selectedItems())
{
QGraphicsLineItem *item2 = dynamic_cast<QGraphicsLineItem*>(item);
if(item2->line().length() != _length )
sameLine = false;
}
qDebug("same line: %d", sameLine);
}
它似乎工作......在调试中。然后在发布测试时,它失败了?
假设单个选中项,soitem1
和item2
是相同的,所以无论精度如何,上述长度应该相等....
在调试中,我还没有看到这个失败......但在发布中,它总是失败!
上面的函数 ( length()
) 返回一个qreal
我看到的唯一解决方法是
- 实现我自己的相等性检查,限制精度,或者
- 将任何qreal
值转换为float
.
但这是不合逻辑的(而且工作量很大,我必须检查很多潜在的地方)。
有人可以解释为什么会发生这种情况以及如何最好地解决这个问题吗?