c++ - Qt qreal计算错误

标签 c++ qt

我想用 QSpinBox 编辑 QGraphicsItem 的不透明度。 QSpinBox 为我提供了值 57,我用它来设置项目的不透明度。 然后我从项目中获取更改后的不透明度,并想要填充 QSpinBox。但是设置框的值会导致错误。

qDebug() << (int)(qreal)(0.57 * 100.0);

输出56

这是一个已知错误吗? 有解决方法吗?

最佳答案

原因

不要依赖 float 的精度,因为它的计算不准确。您可以阅读有关此问题的更多信息 herehere .

演示

如果您使用 qSetRealNumberPrecision 为输出设置更高的精度,您会看到问题的真正根源——0.57 * 100.0 的结果不是精确的 57,而是类似 56.999999999999992895 的结果:

qDebug() << qSetRealNumberPrecision(20) << 0.57 * 100.0;

解决方案

所以最好简单地round你的数字到最接近的整数而不是转换为 int 这只是省略了小数:

qDebug() << qRound(0.57 * 100.0);

关于c++ - Qt qreal计算错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43253278/

相关文章:

c++ - Mxnet C++ API的输出值

c++ - 如何允许工作线程更新 X11 窗口?

c++ - 对数深度缓冲区 OpenGL

带有 Qt 的 iOS 应用程序?

c++ - 使用逻辑线程运行程序

c++ - NS3中如何设置Nodes的IP地址和数据?

c++ - 关于内存泄漏的问题

python - 从 Python 应用程序获取 Qt 样式表

python - 如何在 Ubuntu 中运行 Python Qt 文件?

c++ - 没有收到来自 parent 的 moveEvent?