Как преобразовать QVector‹double› в QByteArray и сжать его

Я хотел бы преобразовать QVector в QByteArray. Я использую что-то вроде этого:

QByteArray bytesArray
QDataStream out(&bytesArray ,QIODevice::WriteOnly);
out << someVector;
bytesArray = qCompress(bytesArray, 5);

И чтобы прочитать это:

bytesArray = qUncompress(bytesArray)
QDataStream in(bytesArray);
QVector<qreal> otherVector;
in >> otherVector;

Но у меня есть проблема. Я сохранил число вроде 1.23124121242135, и после прочтения получил 1.23124. Как я могу сохранить и прочитать полный номер?


person Денис Скоморощенко    schedule 13.01.2020    source источник
comment
Предоставьте минимальный воспроизводимый пример, показывающий, как вы получили эти числа. Вы делаете что-то, что более или менее соответствует qreal r = 1.23124121242135, за которым следует std::cout << r (QDataStreams и сжатие в сторону)? Если это так, вы можете посмотреть Разрушена ли математика с плавающей запятой?.   -  person G.M.    schedule 13.01.2020


Ответы (1)


Если по какой-либо причине это не позволит сохранить значение (например, 0,0 +10 или более десятичных знаков, вы можете сделать обходной путь 1 преобразовать строку double t и получить t_size в int 2 создать длинный или другой int в соответствии с длиной указанного значения и умножить его с размером оригинала и сохранить размер с новым значением int.

Если исходный размер 1,876649018, размер равен 10, поэтому множитель равен 10 ^ 10.

3 вернуть его - это просто вопрос деления нового значения long int на размер

Это единственное, что сейчас приходит на ум...

person Dressy Fiddle    schedule 13.01.2020