double 转int

欢兴 2010-09-19 11:19:47
请问下这么把double转换int而不丢失精度
...全文
177 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hai040 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 huan_xing 的回复:]
不能用移位或者什么方法来解决吗,比如用两个int(32位) 来表示double(64)
[/Quote]
用8个char来放都行,但这只是存放而不是转换
1.1转成整数不失精度?*10?
xingzhe2001 2010-09-19
  • 打赏
  • 举报
回复
存储的话当然可以,但是你不能当作int来计算了。
欢兴 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xingzhe2001 的回复:]

怎么可能不丢失精度,一个是浮点,一个是整数,表示范围也查很多.而且IEEE double光fraction部分就52位,比整数的32位还多。除非对于某些ieee double的数,指数部分固定,就是说小数点后有几个0固定的情况下,且小数部分后20位为0(二进制),那么可以用int存储double 的fraction一点都不丢失精度。
[/Quote]

那能不能用两个int来存储一个double,用的时候再转换过来
ayw215 2010-09-19
  • 打赏
  • 举报
回复
显然不可能
int在32位下是4个字节
double是8个字节

除非你自己写个大整数,把double放到大整数里面去
xingzhe2001 2010-09-19
  • 打赏
  • 举报
回复
怎么可能不丢失精度,一个是浮点,一个是整数,表示范围也查很多.而且IEEE double光fraction部分就52位,比整数的32位还多。除非对于某些ieee double的数,指数部分固定,就是说小数点后有几个0固定的情况下,且小数部分后20位为0(二进制),那么可以用int存储double 的fraction一点都不丢失精度。
欢兴 2010-09-19
  • 打赏
  • 举报
回复
不能用移位或者什么方法来解决吗,比如用两个int(32位) 来表示double(64)
sunshaozeng 2010-09-19
  • 打赏
  • 举报
回复
没小数部份?int放得下?
Csuxiaowu 2010-09-19
  • 打赏
  • 举报
回复
不可兼得-
seacat_hello 2010-09-19
  • 打赏
  • 举报
回复
不太明白你的意思
不知道这个是否满足你的要求
double dval;
int ival = int(dval + 1e-10)
老邓 2010-09-19
  • 打赏
  • 举报
回复
是四舍五入么?
double d = 1.51;
int i = int(d + 0.5);
hai040 2010-09-19
  • 打赏
  • 举报
回复
没小数部份?int放得下?
visualwind 2010-09-19
  • 打赏
  • 举报
回复
只能四舍五入,所以一定会丢失精度的

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧