| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1105 人关注过本帖
标题:急求 java 基础问题 拜托各位了,在下先谢谢了!!
只看楼主 加入收藏
易水辰
Rank: 1
等 级:新手上路
威 望:1
帖 子:136
专家分:0
注 册:2007-6-17
收藏
 问题点数:0 回复次数:9 
急求 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
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
E代表*10的几次方,例如,1.23E3=1.23*10*10*10=1230

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

^_^没事咱就灌水哈^_^!!!
2007-09-19 09:38
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 

我记得好像double类型的,像你这么长的数会自动保留小数点后16位,之后的会四舍五入,float的则是后8位


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

^_^没事咱就灌水哈^_^!!!
2007-09-19 09:59
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
double d=123456788.123456789//个位数是8,9的结果是第一个f
f= 1.23456792E8
double d=123456780.123456789//个位数是0--7的结果是第二个f
f= 1.23456784E8
从来没遇到过,也没好好想过,奇怪...

I'm here, as always...
2007-09-19 10:24
易水辰
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
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
问了下公司的同事,长数据转短数据时会丢失一些数据,估计是丢失在某一范围的时候,得到的float是一个固定的数,丢失在另一范围的时候,又得到一个固定的数。我把小数部分全去掉了,还是一样的结果。应该是个位数决定这个丢失的部分在哪一个范围,然后得到的float就根据丢失的范围来得到新的数。64位转32位,算起来貌似很麻烦的样子...

I'm here, as always...
2007-09-19 10:59
易水辰
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
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 

就用float型举例,假设一个32位的float,最高位是符号位,记为s,假设剩余的31位中,11位用来表示整型,记为c,其余20位用来表示浮点,记为f
整个32位的float型变量计算公式如下:
(-1)^s*2^(s-1023)*(1+f) //关键是浮点数的计算公式
例如:
01111111111100000000000000000000
则s = 0;
c = 2^10+2^9+……+2^0 = 2047
f = 0; //为方便起见,这里的f全取0
则其表示的值为:
(-1)^0 * 2^(2047-1023)*(1+0) = 1 * 2^1024*1 = 2^1024

上面举例中的用11位表示整数和20位表示浮点数,是我大概为了说明如何计算的,至于实际中用几位来分别表示整数和浮点,请参考IEEE标准。
参考资料:数值分析


百度找到的,你先看看吧


I'm here, as always...
2007-09-19 12:06
快速回复:急求 java 基础问题 拜托各位了,在下先谢谢了!!
数据加载中...
 
   



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

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