C++ round(49.5) 在使用变量调用时返回 49(在 Qt 中)

标签 c++ qt integer double rounding

我写了下面的代码:

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

我想问题已经很清楚了。
widthMultiplied49.5
round(49.5) 返回 50
round(widthMultiplied) 返回 49

为什么?

最佳答案

发生这种情况是由于 float 计算不准确。更多信息 herehere

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/

相关文章:

c++ - fatal error : iostream: No such file or directory 3

c++ - QStringListModel排序

javascript - Math.pow() 没有给出准确的答案

java - ArrayIndexOutOfBoundsException、字符串、Int

c++ - Boost::asio udp socket - 我应该如何使用 API 来允许取消读取?

java - xml 解析在 C/C++ 或 Java 中更快?

c++ - 使用 Veins 检查 Omnet++ 中的模块析构函数

qt - 如何使用Qt获取屏幕尺寸?

QT:构建时 Ui 不会刷新

java - 字符串到整数转换给出错误的输出