QVector 追加截断/舍入值
QVector Append truncating/rounding values
我正在使用QVector.append将双精度附加到QVector。使用我的调试器,我可以看到双精度值为 40.783333499999998,但是,QVector 值四舍五入为 40.7833。同样,我在调试器上看到了这一点,没有使用 qDebug,所以我相对确定错误出在存储/追加函数中,而不是在我的代码中其他地方的其他精度损失。向量包含完整值非常重要。我的代码如下。在调试器中,我可以看到 DictionaryOfValues 和迭代器都包含完全精度,但 dataMatrix 值是四舍五入的。我似乎找不到此错误发生的位置。我使用的是 QT 5.2.1 MinGW 32 位。任何帮助将不胜感激。
在此代码中,DictionaryOfValues 是一个 QMap,dataMatrix 是一个 QMap>
QMapIterator<QString,double> i(DictionaryOfValues);
while (i.hasNext())
{
i.next();
dataMatrix[i.key()].append(i.value());
}
实际上,
这是因为调试器格式化QVector
值的方式。矢量中的实际值根本不四舍五入。你可以通过使用这个简单的例子来检查qDebug
的输出来测试它:
double a = 40.783333499999998;
QVector<double> vec;
vec.append(a);
qDebug() <<"double :"<<qSetRealNumberPrecision(17) <<a;
qDebug() <<"Vector: "<< qSetRealNumberPrecision(17) << vec;
您可以看到两个输出是相同的:
双 : 40.783333499999998
矢量: QVector(40.7833333499999998)
默认精度值为 6。您可以使用qSetRealNumberPrecision
更改它 qDebug
.
相关文章:
- C++将浮点指针值舍入为小数位数
- Boost::posix_time::ptime舍入到给定的分钟数
- 浮点定向舍入和优化
- 为什么输出精度没有正确舍入?
- 使用设置精度时如何阻止数字向上舍入?
- 如何在使用 MPFR 时在提升多精度中设置舍入模式
- OpenCV 细分一致的 Rect2f 到 Rect2i 舍入
- C++ 中的舍入函数
- 舍入 QDecDouble 值,精度最多为两个字符
- 将大 int 转换为浮点数,而不舍入 c++
- 舍入错误检测
- 根据浮点符号对浮点进行舍入的最简单方法是什么
- 将整数舍入到另一个整数的最接近的倍数
- Sizeof 舍入到对齐方式,但编译器仍将对象放在剩余的字节中
- 避免将 Int 转换为双重类型转换舍入
- 浮点数学运算后舍入不一致
- 浮动到绳子而无需舍入
- C++长双精度格式而不舍入
- 是否可以为 AVR 编写一个 constexpr 舍入函数?
- QVector 追加截断/舍入值