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
----------------解决方案--------------------------------------------------------
具体机制不清楚了,不过需要指出,在c和c++以及java语言中对于非精确数
是不允许使用==来与另外一个数进行比较的
比如最常见的错误是
double dd = getDouble();
if (dd == 0) { //这个结果是未知数的,是一个不确定的结果
//do some thing....
}
里面的原有,不知道的话自己查资料吧
----------------解决方案--------------------------------------------------------
float所占的字节数好像是16(记得不太清楚了);
double所占的字节数是float的两倍。
[此贴子已经被作者于2007-11-12 19:49:16编辑过]
----------------解决方案--------------------------------------------------------
float 32位 好象是7个有效数(小数点)
double 是float两倍 64位 好象有16个有效数
----------------解决方案--------------------------------------------------------
float 32位 6或者7个有效数(小数点)
double 64位 好象有16个有效数
----------------解决方案--------------------------------------------------------
float型小数点后6位精确,第7位不精确
double型小数点后15位精确,第16位不精确
----------------解决方案--------------------------------------------------------