黑马程序员技术交流社区

标题: 强制转换类型3小问题,求高手!求大神! [打印本页]

作者: ⋛⋌⋚JEEP    时间: 2014-6-26 00:20
标题: 强制转换类型3小问题,求高手!求大神!
本帖最后由 ⋛⋌⋚JEEP 于 2014-6-26 08:24 编辑

代码:int s = (int)4.342323543 ;System.out.println(s);输出结果返回4 比较正常
分析:数值默认是double类型,强转int类型,左右两边类型相同,结果返回int类型。

double s = (int)4.342323543 输出结果返回4.0
float s = (int)4.342323543 输出结果返回4.0
double s = (float)4.0000 输出结果返回4.0
问题一:上面形式的强转,编译通过,运行通过。分析原因:默认double类型后,又自动提升成double类型。(不知道理解的对不对?)对于结果都是4.0,只保留一位有效数值,求解释?

double s = (float)4.342323543 输出结果返回4.3423237800598145
double s = (float)4.0000 输出结果返回4.0
问题二:一样的编译通过,运行成功。强转成float类型精度变小,在自动提升回double类型,对于结果表示不理解,是补充丢失的精度吗,如果是,那么小数点后面是0的话,就不会补充了?求解释?

double s =(float)4.342323543;输出结果返回4.3423237800598145
double s =(float)4.34232354322222222;输出结果返回4.3423237800598145(同上)
double s =(float)4.342323543345;输出结果返回4.3423237800598145(同上)
问题三:后面小数有效位到了一定数量时,结果返回都一样,求解释?
作者: 姿_`态    时间: 2014-6-26 10:52
代码:int s = (int)4.342323543 ;System.out.println(s);输出结果返回4 比较正常
分析:数值默认是double类型,强转int类型,左右两边类型相同,结果返回int类型。

double s = (int)4.342323543 输出结果返回4.0
float s = (int)4.342323543 输出结果返回4.0
double s = (float)4.0000 输出结果返回4.0
问题一:上面形式的强转,编译通过,运行通过。分析原因:默认double类型后,又自动提升成double类型。(不知道理解的对不对?)对于结果都是4.0,只保留一位有效数值,求解释?
第一个:double类型强转为int类型4,然后向上提升为double 4.0,为什么是4.0,因为在一个数强转为double,会先判断,这个数是不是整数,如果是,就在后面加一个零,如果不是,就补足17位有效数字。
第二个:同上
第三个:判断4.0000是不是整数,强转为float ,如果是整数,直接转化为4.0,然后向上转化为double,转化前判断是不是整数。如果是还是转化为4.0

double s = (float)4.342323543 输出结果返回4.3423237800598145
double s = (float)4.0000 输出结果返回4.0
问题二:一样的编译通过,运行成功。强转成float类型精度变小,在自动提升回double类型,对于结果表示不理解,是补充丢失的精度吗,如果是,那么小数点后面是0的话,就不会补充了?求解释?

第一个:double类型数据,强转为float类型,有效位保留7位,剩下舍弃,然后,将float转化为double,需要补足17位,不足用随机数补上。
第二个:double类型数据,强转为float类型,先判断该数据是不是整数,如果是,直接变为4.0,然后向上转化为double,转化前判断是不是整数。如果是还是转化为4.0

double s =(float)4.342323543;输出结果返回4.3423237800598145
double s =(float)4.34232354322222222;输出结果返回4.3423237800598145(同上)
double s =(float)4.342323543345;输出结果返回4.3423237800598145(同上)
问题三:后面小数有效位到了一定数量时,结果返回都一样,求解释?
float 有效位7位
double有效位17位

作者: ⋛⋌⋚JEEP    时间: 2014-6-26 11:47
姿_`态 发表于 2014-6-26 10:52
代码:int s = (int)4.342323543 ;System.out.println(s);输出结果返回4 比较正常
分析:数值默认是double ...

首先,非常非常感谢您回答,表示很详细!!然后,对于问题二的第一个解释说道,不足位数用随机数补上,之后测试过多次,结果都是一样,这里的随机数应该是伪随机数吧?
作者: 姿_`态    时间: 2014-6-26 12:27
⋛⋌⋚JEEP 发表于 2014-6-26 11:47
首先,非常非常感谢您回答,表示很详细!!然后,对于问题二的第一个解释说道,不足位数用随机数补上,之 ...

是的,就是伪随机数,其实这些还是需要多敲代码,自己进行验证,这样才能记忆深刻
作者: 黄梁梦想享    时间: 2014-6-26 13:01
哇,都是高手呀,咋俺就不去想这些问题呢?羡慕
作者: ⋛⋌⋚JEEP    时间: 2014-6-26 14:19
姿_`态 发表于 2014-6-26 12:27
是的,就是伪随机数,其实这些还是需要多敲代码,自己进行验证,这样才能记忆深刻 ...

恩,我更多就是想要验证一下,很感谢!




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