标题:浮点数有效位
只看楼主
tgnian
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-4-13
 问题点数:0 回复次数:5 
浮点数有效位

public class Test
{
public static void main(String args[])
{

float d=1.88888888888888888888f;
System.out.println(d);
}
}
输出为1.8888888

改为double d=1.88888888888888888888;
输出1.8888888888888888
float的有效位数是多少
double的有效位数是多少
有效位算不算小数点,输出最后一位属不属于有效位

public class Test
{
public static void main(String args[])
{
int i=1;
double d=1.000000000000001; //小数点后15位
System.out.println(d==i);
}

}
输出false
改为double d=1.0000000000000001; //小数点后16位或更多位
输出true

搜索更多相关主题的帖子: 点数 public args float void 
2007-11-11 15:57
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
得分:0 

具体机制不清楚了,不过需要指出,在c和c++以及java语言中对于非精确数
是不允许使用==来与另外一个数进行比较的
比如最常见的错误是
double dd = getDouble();
if (dd == 0) { //这个结果是未知数的,是一个不确定的结果
//do some thing....
}

里面的原有,不知道的话自己查资料吧


我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2007-11-11 22:05
无缘今生
Rank: 2
等 级:新手上路
威 望:3
帖 子:523
专家分:7
注 册:2007-6-25
得分:0 
不同的数据类型比较的时候,通常系统会自动地把占用字节数小的数据转换为与它相比的另一个所占字节数大的数据的类型,然后才进行比较操作。
float所占的字节数好像是16(记得不太清楚了);
double所占的字节数是float的两倍。
当所赋的值超出了它的表示范围的时候,会自动截取。导致赋值失效(当前变量中的值已经不是你予它的值)。

[此贴子已经被作者于2007-11-12 19:49:16编辑过]


时不再来!!!
2007-11-12 19:45
孤魂居士
Rank: 2
来 自:老A(中国地大)
等 级:论坛游民
威 望:4
帖 子:1142
专家分:18
注 册:2007-5-21
得分:0 
float 32位 好象是7个有效数(小数点)
double 是float两倍 64位 好象有16个有效数

准备用3年做个高级软件工程师 10年也做不成。准备用10年做成高级软件工程师 3年就成了QQ 群 45771086
欢迎版主...欢迎JAVA爱好者...
一起从深夜 到凌晨...
2007-11-14 00:04
xbw0114
Rank: 1
等 级:新手上路
帖 子:141
专家分:0
注 册:2007-8-8
得分:0 
float 32位 6或者7个有效数(小数点)
double 64位 好象有16个有效数

勤奋造就未来
2007-11-14 00:23
真爱小刀
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2007-8-21
得分:0 
float型小数点后6位精确,第7位不精确
double型小数点后15位精确,第16位不精确
2007-11-14 23:28



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




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

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