[经验] 浮点数转 整形的一个方法

247153481   2015-6-27 17:36 楼主
  1. int ftol(double f)
  2. {
  3.     union d2i
  4.     {
  5.     long long i;
  6.     double d;
  7.     }fi;
  8.     a.d=f+6755399441055744.0;
  9.     return fi.i;
  10. };



可能一般想把浮点数转为整数都是(int)完事,可是这么一句简单的话其实还是挺复杂的

上面的代码就是一个简便方法

回复评论 (11)

a.d ,fi.i是什么玩意?没定义啊?
点赞  2015-6-27 21:07
a.d=f+6755399441055744.0;
应该是
fi.d=f+6755399441055744.0;
点赞  2015-6-27 21:26
这是什么逻辑?
点赞  2015-6-28 02:33
引用: dcexpert 发表于 2015-6-27 21:26
a.d=f+6755399441055744.0;
应该是
fi.d=f+6755399441055744.0;

感谢指正,,忘记把变量改过来了
点赞  2015-6-28 08:57
引用: fxyc87 发表于 2015-6-27 21:07
a.d ,fi.i是什么玩意?没定义啊?

感谢楼下的指正
a.d=f+6755399441055744.0;
应该是
fi.d=f+6755399441055744.0;
点赞  2015-6-28 08:57
不知道怎么重新编辑帖子呢?右上角没有编辑按钮啊
点赞  2015-6-28 08:58
  1. int ftol(double f)
  2. {
  3.     union d2i
  4.     {
  5.     long long i;
  6.     double d;
  7.     }fi;
  8.     fi.d=f+6755399441055744.0;
  9.     return fi.i;
  10. };

感谢@dcexpert
点赞  2015-6-28 08:59
你确定这样可以?那么如果fi.d=0.1,那么fi.i = ?
我的印象里共用体只是以不同的形式显示内部的二进制数,并不能起到数据格式转换的作用吧。
点赞  2015-6-28 10:23
引用: jishuaihu 发表于 2015-6-28 10:23
你确定这样可以?那么如果fi.d=0.1,那么fi.i = ?
我的印象里共用体只是以不同的形式显示内部的二进制数 ...

可不可以你自己试试嘛,没错共用体肯定不行,不过你可以看看IEEE 754_ 的标准。重点是在加上了那个很大的数字。
当然了,这个也不是万能的,前提是不能超过64位数字所能表示的最大数,即2^64
点赞  2015-6-28 12:08
引用: 247153481 发表于 2015-6-28 12:08
可不可以你自己试试嘛,没错共用体肯定不行,不过你可以看看IEEE 754_ 的标准。重点是在加上了那个很大 ...

没有注意加的那个数
点赞  2015-6-28 13:20
在我眼里,它就好像是 卡马克 那个 神秘数的存在
虽然,没有那么厉害的用处。

1025
强者为尊,弱者,死无葬身之地
点赞  2017-11-13 18:35
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复