为什么qjsonvalue todouble转换导致数据丢失?

时间:2013-10-06 09:18:49

标签: c++ qt qtcore

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

1 个答案:

答案 0 :(得分:1)

toDouble()表示它返回一个double(然后你转换为qulonglong),这本身就是一个精度损失。你可以通过打印出这个来轻松解决这个问题而不涉及json:

的main.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