黑马程序员技术交流社区

标题: 关于5/0 与5.0/0的区别 [打印本页]

作者: yibo924    时间: 2014-11-27 22:37
标题: 关于5/0 与5.0/0的区别
输出打印5/0会出错,输出打印5.0却得到一个译为无限的英文。为什么呢?
作者: chun    时间: 2014-11-27 22:59
一情况下0是不可以做除数的,所以5/0不可以,除0异常。
但是在Java中浮点数double和float可以除0,返回无穷大。
作者: kerner    时间: 2014-11-27 23:54
5/0,都是int类型,int计算机可以准确表示出来,所以除数不能为0.
5.0/0,编译器会帮助类型自动提升为double,相当于5.0d/0.0d。。。

浮点数在计算机表示是不精确的,浮点数采用IEEE754格式存。
  float:32位
  1bit(符号位) 8bits(指数位) 23bits(尾数位)
  double:64位
  1bit(符号位) 11bits(指数位) 52bits(尾数位)
具体怎么表示浮点数,自己可以去查资料。

float只能保证小数点后6~7位有效,double是15~16位有效。
所以你不能准确表示一个小数,只能无限接近它。
0.0是不能被精确表示出来,因为小数点后面都是0,并且无穷的,但是不管是float还是double,最多都只能确保小数点后16位是有效地。
所以小数不可能有严格精确地0.0.,只能无限接近它,所以当除数为无限接近0的数时,商是无穷大的。



作者: as604049322    时间: 2014-11-28 00:17
这样啊???
作者: kerner    时间: 2014-11-28 15:44
kerner 发表于 2014-11-27 23:54
5/0,都是int类型,int计算机可以准确表示出来,所以除数不能为0.
5.0/0,编译器会帮助类型自动提升为doubl ...

float f = 3.0....小数默认为double,double不能自动转化为float,因为会有精度损失,所以你要强转,
float f = (float) 3.0;
或者
float f = 3.0f;
作者: cs8630323    时间: 2014-11-28 16:27
{:3_48:}好吓人的头像
作者: 骑着乌龟去旅行    时间: 2014-11-28 19:17
不是无限,是无穷大返回
作者: 王小忠    时间: 2014-11-28 20:07
5/0的话,除数与被除数均为int类型~所以会报除数不为0异常.而5.0/0的话,由于你的被除数是一个duble类型的数据,整个表达式会自动升阶,此时除数0会被自动转为0.0,而JAVA中的double型数据是不精确的,也就是说,此时的0.0表示的不是真正的0.0,而是一个无限接近0.0的数,所以5.0/0也就不会报错了,结果将会得到正无穷大~~~




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