java数据类型转换

package example;

public class test {
public static void main(String[] args) {
int c = 2200;
long d = 8000;
float f;
double g = 123456789.123456789;
c = (int) d;
f = (float) g;
System.out.println("c=" + c);
System.out.println("d=" + d);
System.out.println("f=" + f);
System.out.println("g=" + g);

}
}
这个是源代码,运行结果是
c=8000
d=8000
f=1.23456792E8
g=1.2345678912345679E8
请问f=1.23456792E8里的第二个2是怎么来的?
谢谢!
hnxpmm的解释我多少明白了些,再详细解释下去掉小数点的一半是啥意思,我再加点分,先谢谢你。
这个又怎么解释?
package example;

public class test {
public static void main(String[] args) {
int c = 2200;
long d = 8000;
float f;
double g = 123456787.123456789;
c = (int) d;
f = (float) g;
System.out.println("c=" + c);
System.out.println("d=" + d);
System.out.println("f=" + f);
System.out.println("g=" + g);

}
}
运行结果
d=8000
f=1.23456784E8
g=1.2345678712345679E8
又变成4了。。。明白的给仔细讲解下吧。。。

第1个回答  2009-08-13
这很明显
第一 c=(int)d; 意思是把d的值强转为int类,然后赋给c,那么c自然也等于8000.

第二 f=(float)g; 意思是把double类型的g值,强转为float类型然后赋给f,因为float是单精度,所以结果就去掉小数点的一半.
第2个回答  2009-08-13
是因为浮点行转换成字符串的时候 涉及到占位和补位 所以会产生这种情况
一个字符占2个字节 而一个浮点小数的单精度是占4个字节 双精度占8个字节
在转换的时候当然会出现这种情况
第3个回答  2009-08-13
我补充下hnxpmm的解释吧
f=1.23456792E8相当于是将123456789.123456789的小数点前移变成1.23456789123456789*10^8,去掉小数的一半就变成1.23456789*10^8了,
第4个回答  2009-08-13
double g = 123456789.123456789;
f = 1.23456792E8;
相信你应该看到了!
相似回答