C 圆形(49.5)返回49次使用变量(以QT为单位)
C++ round(49.5) returns 49 when called with variable (in Qt)
我写了以下代码:
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 。
为什么?
由于浮点数计算的不准确而发生的。这里和这里的更多信息。
width * mult
乘法的结果不是精确的49.5,而是49.4999999,这是将您的数字四舍五入到49而不是50的原因。通过为qDebug
输出设置更高的精度:
qDebug() << qSetRealNumberPrecision(20) << widthMultiplied;
阅读Kefir的答案以获取背景信息。我认为一个完整的工作解决方案(虽然您对数字不太遥远)可能是:
int number = 55;
double mult = 0.9;
double roundedNumber = round( static_cast<double>( static_cast<int>( number * mult * 100. ) ) / 100 );
相关文章:
- 根据变量使Qt UI中的复选框为已选中/未选中
- QT C++中对全局变量的未定义引用
- 在qt创建器中调试时如何访问字符串变量的完整值?
- QT 如何将变量传递到主窗口
- 如何设置Qt应用程序以使用类Unix系统的实际环境变量?
- 将变量从主窗口传递到另一个qt c++窗体
- 面临在 if 语句之外打印变量数据的问题 完成使用 Qt 编程
- 指针作为类变量 Qt
- Qt C++创建一个所有类都可以访问的全局变量
- Qt读取串行输入,然后将其拆分为单独的变量
- 如何在Qt cpp的SQlite数据库中插入变量的值
- QT连接:使用lambda表达式重置通过了int变量(怪异)
- QT变量赋值,<没有这样的值>,SIGSEGV
- 使用 c++ / QT 创建器从另一个类中设置和获取单例变量
- 如何从QT中的另一个CPP文件中访问CPP文件中的变量
- 如何访问此变量QT
- MainWindow的Worker线程的QT更新变量
- 如何列出从Qt中Qobject继承的类的所有成员变量
- QString变量在使用QT Creator从键盘输入的双变量后跳过
- QT;我如何在运行时存储通往变量的资源路径