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