为什么 qjsonvalue 到双倍转换会导致数据丢失

Why does qjsonvalue todouble conversion cause data loss?

本文关键字:数据 转换 qjsonvalue 为什么      更新时间:2023-10-16

QJsonValue toDouble() 转换会生成错误的值,导致数据丢失。

QJsonObject obj;
obj.insert("dbl",double(73183493944884961));

double d = obj.value("dbl").toDouble();
qulonglong ul = d;
qulonglong ul2 = 73183493944884961;
qDebug ()  << ul << ul2;

输出:

73183493944884960 73183493944884961

toDouble() 意味着它返回一个双精度(然后你将其转换为 qulonglong),这本质上是一种精度损失。通过打印出以下内容,您可以轻松解决此问题,而无需将 json 卷入其中:

主.cpp

#include <QDebug>
    int main()
    {
        qulonglong ul2 = double(73183493944884961);
        qDebug() << ul2;
        return 0;
    }

建筑(类似的东西)

g++ -fPIC -I/usr/include/qt -I/usr/include/qt/QtCore -lQt5Core main.cpp && ./a.out

输出

73183493944884960