黑马程序员技术交流社区

标题: 关于数据类型转换问题 [打印本页]

作者: 朝着梦想使劲冲    时间: 2015-8-18 12:14
标题: 关于数据类型转换问题
int  n=123456789;
float f=n;
此时f=1.23456792E8
不懂啊,这怎么理解?

作者: sven556677    时间: 2015-8-18 20:09
我瞎说啊。Int是四个字节,float也是四个字节,所以通过二进制表示的数位是差不多的,比如你的123456789,那float为什么要叫浮点型的呢?应该就是多一个表示小数点在哪的位数吧。以上纯属瞎BB,没有具体文献视频引用,呵呵。
作者: zhao1991    时间: 2015-8-18 20:34
float类型能表示的数的范围远大于int型,所有int型的数转换为float不会溢出,但可能会舍入,又由于float只能表现成带小数的数,所以才有了上述结果,与类型所占的字节数没有太大关系。
作者: 蓬头小道士    时间: 2015-8-18 22:01
把int类型强转为float类型
作者: 何时指点江山    时间: 2015-8-18 22:01
java中所有关于小数的运算都是不准确的,
作者: Coolman    时间: 2015-8-18 22:24
我觉得跟“float 数据在内存中是怎么存储的”这个问题有关系,楼主可以搜索资料慢慢研究
作者: qlmmys    时间: 2015-8-18 22:26
本帖最后由 qlmmys 于 2019-10-18 15:13 编辑

http://bbs.itheima.com/forum.php ... =1723912&page=1
作者: lf900827    时间: 2015-8-18 22:36
float的存储方式和int类型是不一样的,下面的采用的是科学计数法,即1.23456789*10^8次方
作者: 朝着梦想使劲冲    时间: 2015-8-19 08:36
zhao1991 发表于 2015-8-18 20:34
float类型能表示的数的范围远大于int型,所有int型的数转换为float不会溢出,但可能会舍入,又由于float只 ...

我理解的是  f=1.23456789E8 ,为什么后面不是89而是92?
作者: 朝着梦想使劲冲    时间: 2015-8-19 08:38
sven556677 发表于 2015-8-18 20:09
我瞎说啊。Int是四个字节,float也是四个字节,所以通过二进制表示的数位是差不多的,比如你的123456789, ...

没事  都在学习中,类型转换这块最头疼。
作者: 朝着梦想使劲冲    时间: 2015-8-19 08:39
lf900827 发表于 2015-8-18 22:36
float的存储方式和int类型是不一样的,下面的采用的是科学计数法,即1.23456789*10^8次方 ...

我理解的是  f=1.23456789E8 ,为什么后面不是89而是92
作者: 朝着梦想使劲冲    时间: 2015-8-19 08:40
Coolman 发表于 2015-8-18 22:24
我觉得跟“float 数据在内存中是怎么存储的”这个问题有关系,楼主可以搜索资料慢慢研究 ...

好  我查查资料看看。
作者: myself123    时间: 2015-8-19 12:16
10的八次方把
作者: zhao1991    时间: 2015-8-19 16:06
123456789=111010110111100110100010101=1.11010110111100110100010101*2^26,由于float类型数占4个字节,其中符号位1位,尾数23位(小数点后面的位),阶码8位,在123456789所对应的二进制科学表示法中,尾数是11010110111100110100010101有26位,但尾数只能有23位,所以多出来的位就被舍弃了,就有了1.23456792E8吧
作者: 朝着梦想使劲冲    时间: 2015-8-20 12:06
zhao1991 发表于 2015-8-19 16:06
123456789=111010110111100110100010101=1.11010110111100110100010101*2^26,由于float类型数占4个字节, ...

感谢你的解答




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2