找回密码
 立即注册
收起左侧

Qt里面如何将double型数据转化为64位有符号整数?

7
回复
9676
查看
[复制链接]
累计签到:5 天
连续签到:1 天
来源: 2016-12-12 10:49:58 显示全部楼层 |阅读模式
1Qter豆
Qt里面想要把double型数据转换为64位有符号整数。

c#里面用的是BitConverter.DoubleToInt64Bits(a);这个方法,但是Qt里面没有这个方法,该如何实现呢?


最佳答案

查看完整内容

你说的不就是浮点型转整形吗,若强转,会丢失精度,考虑用C的知识(字节拷贝memcpy): double dv = 1.2; quint64 iv1 = 0; memcpy(&iv1, &dv, sizeof(double));
回复

使用道具 举报

累计签到:10 天
连续签到:1 天
2016-12-12 10:49:59 显示全部楼层
你说的不就是浮点型转整形吗,若强转,会丢失精度,考虑用C的知识(字节拷贝memcpy):
double dv = 1.2;
    quint64 iv1 = 0;
    memcpy(&iv1, &dv, sizeof(double));
回复

使用道具 举报

累计签到:5 天
连续签到:1 天
2016-12-12 17:20:21 显示全部楼层
木的码农 发表于 2016-12-12 17:00
你说的不就是浮点型转整形吗,若强转,会丢失精度,考虑用C的知识(字节拷贝memcpy):
double dv = 1.2;
  ...

long s = BitConverter.DoubleToInt64Bits(a);
在c#里面有这样一句代码,我加断点调试之后,发现a=1时,s=4607182418800017408;
回复

使用道具 举报

累计签到:10 天
连续签到:1 天
2016-12-12 17:27:19 显示全部楼层
aizhanglua12 发表于 2016-12-12 17:20
long s = BitConverter.DoubleToInt64Bits(a);
在c#里面有这样一句代码,我加断点调试之后,发现a=1时,s ...

对啊,我的方法结果也是啊,有什么问题吗?
回复

使用道具 举报

累计签到:5 天
连续签到:1 天
2016-12-12 17:35:22 显示全部楼层
木的码农 发表于 2016-12-12 17:27
对啊,我的方法结果也是啊,有什么问题吗?

啊啊啊~~~太感谢了!!!这个问题整了好久也没解决~~
回复

使用道具 举报

累计签到:10 天
连续签到:1 天
2016-12-12 17:37:47 显示全部楼层
aizhanglua12 发表于 2016-12-12 17:20
long s = BitConverter.DoubleToInt64Bits(a);
在c#里面有这样一句代码,我加断点调试之后,发现a=1时,s ...

上面的转换,不是数值的转换,而是字节的转换,和数值没有关系;
所以,你将为浮点数的1转换为整形,由于类型的定义不同,数值当然不一样;
如果,你想数值的转换,那就是小学学的内容了: 强制转换,四舍五入
回复

使用道具 举报

累计签到:10 天
连续签到:1 天
2016-12-12 17:41:59 显示全部楼层
木的码农 发表于 2016-12-12 17:37
上面的转换,不是数值的转换,而是字节的转换,和数值没有关系;
所以,你将为浮点数的1转换为整形,由于 ...

哦,不对,强制转换应该是保留整数位,忽略小数位
回复

使用道具 举报

累计签到:5 天
连续签到:1 天
2016-12-12 17:52:01 显示全部楼层
木的码农 发表于 2016-12-12 17:37
上面的转换,不是数值的转换,而是字节的转换,和数值没有关系;
所以,你将为浮点数的1转换为整形,由于 ...

嗯嗯!知道了~谢谢~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了