C++ 为什么QJsonValue::toDouble中会出现精度损失?

C++ 为什么QJsonValue::toDouble中会出现精度损失?,c++,json,qt,C++,Json,Qt,我想在中存储一个双精度值,稍后再检索相同的值。但是,检索到的值精度较低 以下是一个例子: qDebug() << QJsonObject({{"number", 49.195502187}}).value("number").toDouble(); 产出49.1955,而不是49.195502187 我已经检查过了,但它是关于数据类型之间的转换,与我的具体情况无关 如何检索正确的值?原因 仅当显示该值时,才会发生精度损失。在内部存储正确的值。要确保是这样,请按如下方式分解代码: Q

我想在中存储一个双精度值,稍后再检索相同的值。但是,检索到的值精度较低

以下是一个例子:

qDebug() << QJsonObject({{"number", 49.195502187}}).value("number").toDouble();
产出49.1955,而不是49.195502187

我已经检查过了,但它是关于数据类型之间的转换,与我的具体情况无关

如何检索正确的值?

原因 仅当显示该值时,才会发生精度损失。在内部存储正确的值。要确保是这样,请按如下方式分解代码:

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

qDebug() << value;
这将为您提供存储在JSON中的值:

49.195502187
对我有用。没有精度损失。一般来说,代码比文字更能说明问题,所以如果你说发生了什么事情,你最好编写一个带有断言的测试用例,并且只有在断言证明有问题时才发布问题。它还非常清楚您的期望是什么——代码中没有歧义,就像英语中一样,只要您不依赖于未定义或实现定义的行为,也就是说

49.195502187
#include <QtCore>

int main() {  
   auto const value = 49.195502187;
   auto const recovered = QJsonObject({{"number", value}}).value("number").toDouble();
   Q_ASSERT(value == recovered);
}