我写了下面的代码:
void InputNodeInstance::changeSize(QString side, float mult) {
qDebug() << "width: " << width;
double widthMultiplied = width * mult;
qDebug() << "width * mult: " << width * mult;
qDebug() << "widthMultiplied: " << widthMultiplied;
qDebug() << "round(widthMultiplied): " << round(widthMultiplied);
qDebug() << "round(49.5): " << round(49.5);
width = width * mult + 0.5;
qDebug() << "width: " << width;
}
当我用 0.9 作为 mult
调用函数时,我得到了这个输出:
width: 55
width * mult: 49.5
widthMultiplied: 49.5
round(widthMultiplied): 49
round(49.5): 50
width: 49
我想问题已经很清楚了。
widthMultiplied
为 49.5。
round(49.5)
返回 50。
round(widthMultiplied)
返回 49。
为什么?
最佳答案
发生这种情况是由于 float 计算不准确。更多信息 here 和 here。
width * mult
乘法的结果不是精确的 49.5,而是类似于 49.4999999,这就是将数字四舍五入为 49 而不是 50 的原因。通过设置更高的 precision 自己尝试你的 qDebug
输出:
qDebug() << qSetRealNumberPrecision(20) << widthMultiplied;
关于C++ round(49.5) 在使用变量调用时返回 49(在 Qt 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46389221/