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

Hanging when working with basic types in Qt

本文关键字:类型 挂起 Qt      更新时间:2023-10-16

在程序中,我想在lineEdit中将数字" 0.12345"显示为" .12345"(删除第一个零)。为此,我编写了下面的简单代码:

QString s;
QTextStream ss(&s);
double temp = 0.12345;
int n = 0;
if(temp > 0)
{
    ss << ".";
    while (true)
    {
        temp *= 10;
        n = temp;
        if (temp == n)
            break;
    }
    ss << n;
}
lineEdit->setText(s);

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

请问程序以这种方式运行有什么问题?

问题

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

溶液

在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);
}