【转】QT中QDataStream中浮点数输出问题
先上代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
int main(int argc, char *argv[]){ QApplication a(argc, argv); QFile file1("test.dat"); if(!file1.open(QIODevice::WriteOnly)) std::cout<<"can not open file"<<std::endl; QDataStream fout(&file1); float f=80.4; fout<<f; std::cout<<"done!"<<std::endl; file1.close(); return a.exec();} |
原意应该输出float类型的二进制文件,其长度应该为32bit即四字节,但输出结果如下图:
长度为8字节,后面四字节是多出来的
我将程序改成使用QByteArray 时,则可以正常输出,
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
int main(int argc, char *argv[]){ QApplication a(argc, argv); QFile file1("test.dat"); if(!file1.open(QIODevice::WriteOnly)) std::cout<<"can not open file"<<std::endl; QDataStream fout(&file1); QByteArray byteArray; QBuffer buffer1(&byteArray); buffer1.open(QIODevice::WriteOnly); QDataStream out(&buffer1); float f=80.4; out<<f; fout.writeRawData(byteArray,sizeof(float)); std::cout<<"done!"<<std::endl; file1.close(); return a.exec();} |
此时输出结果正常
求高手解释原理!
算是自问自答吧,今天仔细看了一下帮助文档,原来在高版本中QDataStream中默认精度为double,所以需要在程序中将QDataStream中浮点数精度改为single,办法为QDataStream::setFloatingPointPrecision(QDataStream::singlePrecision)
【转】QT中QDataStream中浮点数输出问题的更多相关文章
- java中float/double浮点数的计算失精度问题(转)
如果我们编译运行下面这个程序会看到什么? public class Test { public static void main(String args[]) { ...
- Qt在pro中实现条件编译
https://www.cnblogs.com/Braveliu/p/5107550.html https://blog.csdn.net/simonforfuture/article/details ...
- Java中数字的格式化输出
Java中数字的格式化输出 double d = 345.678; String s = "hello!"; int i = 1234; //"%"表示进行格式 ...
- 在现有的图像处理软件中融合dxf格式输出
在现有的图像处理软件中融合dxf格式输出 dxf格式是autocade的支持格式.如果将现有图像识别的结果导出到dxf格式,就能够使用autocad的强大功能进行后续处理. dxf的格式比较复杂,开源 ...
- 报表控件NCReport教程:集成NCReport到Qt应用程序中
NCReport是一款轻量级.快速.多平台.简单易用的基于Qt toolkit的C++编写的报表解决方案,目前主要包括报表渲染库和报表设计器GUI应用程序. 但是好多使用NCReport控件的朋友都不 ...
- Qt开发环境中使用报表控件FastReport遇到的一些问题(一)
FastReport是一款优秀的报表控件,由俄罗斯开发,国内有代理商.Qt环境下可实现报表功能的还有一款叫NCReport,也是收费控件,比较来比较去还是觉得前者功能强点.网上讲解此控件在Qt中使用的 ...
- DotNet中人民币符号的输出
DotNet中人民币符号“¥”的输出<html> <head>DotNet中人民币符号的输出</head> <body> <p>¥100元& ...
- linux c程序中获取shell脚本输出的实现方法
linux c程序中获取shell脚本输出的实现方法 1. 前言Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作. ...
- POJ 2255 Tree Recovery(根据前序遍历和中序遍历,输出后序遍历)
题意:给出一颗二叉树的前序遍历和中序遍历的序列,让你输出后序遍历的序列. 思路:见代码,采用递归. #include <iostream> #include <stdio.h> ...
随机推荐
- webpack+vue-cli中代理配置(proxyTable)
在做vue的项目时,用到webpack打包工具,我们会发现本地开发开启的node服务地址请求接口的地址存在跨域问题.本地开启的服务地址是 http://localhost:8080 而服务器的地址是 ...
- Redis客户端连接以及持久化数据(三)
0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...
- Android-Kotlin在Fragment获取View
Android-Kotlin在Fragment获取View Overview 在使用Fragment的时候,使用了ButterKnife 来获取View但是一直出错,后来就直接使用Kotlin的导入布 ...
- vue-video-player的使用总结
由于公司的项目是网上教育的,像网易云课堂那种教育网站,因而会有很多课程需要在线观看的,所以视频插件是必不可少的. 由于我用vue开发项目,所以找视频插件也找和vue贴近的.最后选择了vue-video ...
- Struts 2 学习笔记
1.Struts2 jar包 struts2-core-2.1.8.1 struts2的核心jar包,不可缺少的 xwork-core-2.1.6 xwork的核心包,由于Struts2是由xwork ...
- android的AsyncTask.get()方法会阻塞UI线程
AsyncTask.get()方法, 是有阻塞UI的能力的.
- FTP传输一定要注意使用二进制模式
一个问题困扰了我一下午,刚刚才解决.我要上传一个PHP程序,其中用了sqlite数据库,没想到上传完以后无论如何也不能用,总是数据库查询失败.我登录上SSH,把几乎每个php都调试了一遍,还是没法解决 ...
- 【BZOJ-3218】a+b Problem 最小割 + 可持久化线段树
3218: a + b Problem Time Limit: 20 Sec Memory Limit: 40 MBSubmit: 1320 Solved: 498[Submit][Status] ...
- Codeforces Round #258 (Div. 2) A. Game With Sticks 水题
A. Game With Sticks 题目连接: http://codeforces.com/contest/451/problem/A Description After winning gold ...
- rabbitmq的发布确认和事务 - 2207872494的个人空间
rabbitmq的发布确认和事务 - 2207872494的个人空间 https://my.oschina.net/lzhaoqiang/blog/670749