在Qt中使用基本类型时挂起

时间:2017-01-31 19:30:45

标签: c++ qt

在一个程序中,我想显示数字" 0.12345" as" .12345" ({1}}中删除第一个零点。为此,我写了下面的简单代码:

lineEdit

当我运行它时,程序和Qt Creator挂起,我需要重新运行它才能正常运行。

程序以这种方式行事的问题是什么?

1 个答案:

答案 0 :(得分:1)

问题

您的程序永远不会退出while循环,因为您正在使用==运算符比较浮点数。这会导致计算错误(您可以阅读更多相关信息here)。

解决方案

在Qt中检查double变量相等的正确方法是使用qFuzzyCompare函数:

if (qFuzzyCompare(temp, n)) {
    break;
}

简化

如果正确理解您的任务,您的代码就太复杂了。这应该完成整个工作:

double num = 0.12345;
if (num > 0 && num < 1) {
    QString str = QString::number(num).remove(0, 1);
    lineEdit->setText(str);
}