Why does qjsonvalue todouble conversion cause data loss?

北战南征 提交于 2019-12-14 00:40:52

问题


QJsonValue toDouble() conversion generates wrong values causing data loss.

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


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

qDebug ()  << ul << ul2;

Output:

73183493944884960 73183493944884961

回答1:


toDouble() means it returns a double (that you cast to qulonglong then) which is inherently a precision loss. You can easily figure this out without involving json into this, by printing out this:

main.cpp

#include <QDebug>

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

Building (something similar)

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

Output

73183493944884960


来源:https://stackoverflow.com/questions/19207264/why-does-qjsonvalue-todouble-conversion-cause-data-loss

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!