标题:急求 java 基础问题 拜托各位了,在下先谢谢了!!
取消只看楼主
易水辰
Rank: 1
等 级:新手上路
威 望:1
帖 子:136
专家分:0
注 册:2007-6-17
 问题点数:0 回复次数:4 
急求 java 基础问题 拜托各位了,在下先谢谢了!!
public class Conversion
{
public static void main (String[] args)
{
float f;
double d=123456789.123456789;
f=(float)d;
System.out.println("f= "+f);
System.out.println("d= "+d);
}
}

运行结果如下:
f= 1.23456792E8
d= 1.2345678912345679E8


f= 1.23456792E8 E前面的2是什么意思 为什么不是f= 1.23456789E8

d= 1.2345678912345679E8 E前面的9是8后面的9四舍五入得到的吗


还有:java2实用教程中对于实型float型变量内存分配4个字节 占32位,float型变量的取值范围是1E-38—1E+38和
-1E-38— -1E38
double型变量内存分配8个字节 占64位,double型变量的取值范围是1E-308—1E+308和
-1E-308— -1E308 这些数值是怎么得到的啊,一直研究不明白!!!

希望各位能抽出一点时间给我个解答,在下感激不尽!!!

[此贴子已经被作者于2007-9-19 9:58:16编辑过]

搜索更多相关主题的帖子: java 基础 
2007-09-19 09:10
易水辰
Rank: 1
等 级:新手上路
威 望:1
帖 子:136
专家分:0
注 册:2007-6-17
得分:0 
回复:(hwoarangzk)E代表*10的几次方,例如,1.23E3=...
这我知道啊!不明白的是强制转换运算后得到的结果 是怎么弄出来的,和现实计算的不一样啊

^_^没事咱就灌水哈^_^!!!
2007-09-19 09:38
易水辰
Rank: 1
等 级:新手上路
威 望:1
帖 子:136
专家分:0
注 册:2007-6-17
得分:0 
回复:(hwoarangzk)我记得好像double类型的,像你这...
那样的话f= 1.23456789E8
也就符合了嘛,但是编译结果不是他啊!

^_^没事咱就灌水哈^_^!!!
2007-09-19 09:59
易水辰
Rank: 1
等 级:新手上路
威 望:1
帖 子:136
专家分:0
注 册:2007-6-17
得分:0 
以下是引用hwoarangzk在2007-9-19 10:24:14的发言:
double d=123456788.123456789//个位数是8,9的结果是第一个f
f= 1.23456792E8
double d=123456780.123456789//个位数是0--7的结果是第二个f
f= 1.23456784E8
从来没遇到过,也没好好想过,奇怪...

呵呵,这可是书上的原题啊,老师讲课的时候一笔带过,没有问出结果,只好来求助了!

是啊,但是为什么啊!!

谢谢啊!!


^_^没事咱就灌水哈^_^!!!
2007-09-19 10:33
易水辰
Rank: 1
等 级:新手上路
威 望:1
帖 子:136
专家分:0
注 册:2007-6-17
得分:0 
以下是引用hwoarangzk在2007-9-19 10:59:44的发言:
问了下公司的同事,长数据转短数据时会丢失一些数据,估计是丢失在某一范围的时候,得到的float是一个固定的数,丢失在另一范围的时候,又得到一个固定的数。我把小数部分全去掉了,还是一样的结果。应该是个位数决定这个丢失的部分在哪一个范围,然后得到的float就根据丢失的范围来得到新的数。64位转32位,算起来貌似很麻烦的样子...

谢谢你半天以来的帮助,能否告诉我 他们的取值范围是怎么回事吗!
非常感谢!!!


^_^没事咱就灌水哈^_^!!!
2007-09-19 11:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-171084-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.458987 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved