gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:18:52 24 4
gpt4 key购买 nike

在程序中,我想在 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 循环,因为您正在使用 == 运算符比较 float 。这会导致计算错误(您可以阅读更多相关信息 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);
}

关于c++ - 在 Qt 中使用基本类型时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41965967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com