如何从 QJsonObject 中获取精确的值?

huangapple go评论64阅读模式
英文:

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({&quot;close&quot;: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() &lt;&lt; qSetRealNumberPrecision( 10 ) &lt;&lt; qjv.toDouble();

If you want to set this precision only once, then you can define your own qDebug, such as:

#define qDebug10() qDebug() &lt;&lt; qSetRealNumberPrecision(10)

and use it like this:

qDebug10() &lt;&lt; qSetRealNumberPrecision( 10 ) &lt;&lt; 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() &lt;&lt; QString::number(qjv.toDouble(), &#39;f&#39;, 5);

You get: 44112.25895

Then, try:

qDebug() &lt;&lt; QString::number(qjv.toDouble(), &#39;f&#39;, 30);

Now you get: 44112.258950000003096647560596466064

It's a floating point issue.

huangapple
  • 本文由 发表于 2023年6月2日 08:50:59
  • 转载请务必保留本文链接:https://go.coder-hub.com/76386539.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定