在 Qt 中使用基本类型时挂起
Hanging when working with basic types in Qt
在程序中,我想在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);
}
相关文章:
- 挂起和取消挂起一个文件DLL
- 如何防止C++遗留代码中的挂起指针
- 为什么所有C++编译器都会崩溃或挂起此代码
- 我编写了代码将十进制分数转换为其二进制等效数.它编译得很好,但在执行时挂起
- 构建挂起,即使是适度的文件大小
- 循环挂起迭代的 std::擦除 on std::list
- Poco::Net::FTPClientSession 在 open() 方法上挂起 129 秒,如果 ftp 主机不存
- Node.js fs.open() 在尝试打开 4 个以上的命名管道 (FIFO) 后挂起
- 从不同进程中的另一个线程挂起/恢复线程或进程
- Boost (Beast) websocket:同步写入挂起
- 为什么析构函数挂起
- 使用互斥会挂起程序
- 在C++和 Python 程序中使用命名管道的 IPC 挂起
- 设置变量时C++程序挂起
- 第一次尝试使用new动态创建结构数组,程序挂起没有错误
- 从stdin读取时子进程挂起(fork/dup2竞争条件)
- 有时ShowWindow从不调用OnShowWindow,主应用程序挂起
- 如何防止GUI挂起,同时允许第二次操作与Qt中的第一次操作一起执行
- WTSFreeMemory在启动期间从服务调用时挂起-我应该省略吗
- 在 Qt 中使用基本类型时挂起