黑马程序员技术交流社区
标题:
关于类型转换的问题
[打印本页]
作者:
一帆风顺
时间:
2012-9-17 09:50
标题:
关于类型转换的问题
本帖最后由 王博 于 2012-9-18 07:27 编辑
public class Convert
{
public static void main(String[] args) {
int numi1 = 2,numi2 = 3;
System.out.println(numi1/numi2);
System.out.println((float)numi1/numi2);
int numi3 = 999999999;
float numf1;
numf1 = numi3;
System.out.println((int)numf1);
}
}
给的输出结果是
0
0.6666667
1000000000
前两个的结果知道,第三个的结果是怎么来的啊?是通过进位么?那怎么进的啊?
作者:
杨建峰
时间:
2012-9-17 15:09
float 精度不高, 代码是先将 INT 强制转换成 FLOAT ,再赋值, 转换后 9.99999999 * E9 ,
然后 ,再显示转换后 , 变成 100000000 ; 类似于 1.0 打印后显示 0.999999998 ,什么
的这种。 使用 DOUBLE 进行转换就会显示正确结果。 已经用实例自己试过了,不过还是头大
,讲错了不要见怪。
作者:
宫明星
时间:
2012-9-17 15:31
本帖最后由 宫明星 于 2012-9-17 15:51 编辑
我试了下,楼主代码打错了好几个println打错字pintln
float打错了flout。
最后一个不加int转换的话输出的是1.0E9 说明在numf1 = numi3赋值的过程中已经把
999999999转换成了1000000000.
public class Convert
{
public static void main(String[] args)
{
int n = 999999999;
float f;
f = n;
System.out.println((float)n);
System.out.println(f);
System.out.println((int)f);
}
}
复制代码
输出是1.0E9,1.0E9,1000000000
该是int型转换float造成的。
具体原因我再找找。
这次我也学到了点东西
自己找了很久,发现有个说法可能靠谱:
如果一个数路够大,因为浮点在java中占32位,其中第一位是符号位,当数足够大的时候,分数部分最先损失,然后是整数部分。
作者:
赵家阳
时间:
2012-9-17 15:46
我也不理解,自己试验,还是不行!不过,楼主的代码写错了! System.out.
pintln
(numi1/numi2); 应该是println
System.out.pintln((
flout
)numi1/numi2); 应该是float
希望以后多细心点!
作者:
一帆风顺
时间:
2012-9-18 07:21
写错的地方虚心接受,问题已经明白,谢谢大家
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2