英文:
How to get the precise value from QJsonObject?
问题
我已经编写了以下代码。
我想要的正确值是 44112.25895,
但结果值是 44112.3,
我该如何修复这个问题?
QJsonObject qj{ {"close", 44112.25895} };
qDebug() << qj;
QJsonValue qjv = qj.value("close");
qDebug() << qjv;
qDebug() << qjv.toDouble();
结果是
QJsonObject({"close":44112.25895})
QJsonValue(double, 44112.3)
44112.3
<details>
<summary>英文:</summary>
I have made code below.
i want correct value as 44112.25895
but result value is 44112.3
how can i fix this issue?
QJsonObject qj{ {"close", 44112.25895} };
qDebug() << qj;
QJsonValue qjv = qj.value("close");
qDebug() << qjv;
qDebug() << qjv.toDouble();
result is
QJsonObject({"close":44112.25895})
QJsonValue(double, 44112.3)
44112.3
</details>
# 答案1
**得分**: 1
如[chehrlic][1]在评论中指出,qDebug()的默认精度不是您想要的。[Qt文档][2]指出默认精度为6位小数。
您可以使用[qSetRealNumberPrecision][3]进行调整,如下所示:
```cpp
qDebug() << qSetRealNumberPrecision(10) << qjv.toDouble();
如果您只想设置这个精度一次,那么您可以定义自己的qDebug,例如:
#define qDebug10() qDebug() << qSetRealNumberPrecision(10)
然后像这样使用它:
qDebug10() << qjv.toDouble();
英文:
As indicated by chehrlic in the comments, the default precision of qDebug() is not what you want. The Qt documentation says that
the default precision is 6 digits.
You can adjust it using qSetRealNumberPrecision, like this:
qDebug() << qSetRealNumberPrecision( 10 ) << qjv.toDouble();
If you want to set this precision only once, then you can define your own qDebug, such as:
#define qDebug10() qDebug() << qSetRealNumberPrecision(10)
and use it like this:
qDebug10() << qSetRealNumberPrecision( 10 ) << qjv.toDouble();
答案2
得分: 0
只是 qDebug()
的表示问题。
尝试这样做:
qDebug() << QString::number(qjv.toDouble(), 'f', 5);
你会得到:44112.25895
然后,尝试:
qDebug() << QString::number(qjv.toDouble(), 'f', 30);
现在你会得到:44112.258950000003096647560596466064
这是一个浮点数问题。
英文:
It's only qDebug()
's representation issue.
Try this:
qDebug() << QString::number(qjv.toDouble(), 'f', 5);
You get: 44112.25895
Then, try:
qDebug() << QString::number(qjv.toDouble(), 'f', 30);
Now you get: 44112.258950000003096647560596466064
It's a floating point issue.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论