我想用 QSpinBox
编辑 QGraphicsItem
的不透明度。
QSpinBox
为我提供了值 57,我用它来设置项目的不透明度。
然后我从项目中获取更改后的不透明度,并想要填充 QSpinBox
。但是设置框的值会导致错误。
qDebug() << (int)(qreal)(0.57 * 100.0);
输出56
这是一个已知错误吗? 有解决方法吗?
最佳答案
原因
不要依赖 float 的精度,因为它的计算不准确。您可以阅读有关此问题的更多信息 here或 here .
演示
如果您使用 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/