为什么QJsonValue :: toDouble中存在精度损失?

sco*_*nov 0 c++ qt json

我想在以后存储一个doubleQJsonObject并检索相同的值.但是,检索到的值的精度较低.

这是一个例子:

qDebug() << QJsonObject({{"number", 49.195502187}}).value("number").toDouble();
Run Code Online (Sandbox Code Playgroud)

输出49.1955,而不是49.195502187.

我已经检查了为什么qjsonvalue todouble转换导致数据丢失?,但它是关于数据类型之间的转换,与我的具体情况无关.

如何检索正确的值?

sco*_*nov 7

原因

仅在显示值时才会发生精度损失.在内部存储正确的值.为了确保它是这样,打破代码如下:

QJsonObject json({{"number", 49.195502187}});
double value = json.value("number").toDouble();

qDebug() << value;
Run Code Online (Sandbox Code Playgroud)

然后使用调试器,断点设置为qDebug() << value;:

在此输入图像描述

我建议您使用QString::number以便为显示的值设置所需的精度,例如:

qDebug() << QString::number(value, 'g', 14);
Run Code Online (Sandbox Code Playgroud)

这将为您提供存储在JSON中的值:

49.195502187
Run Code Online (Sandbox Code Playgroud)