当前位置: 代码迷 >> Java相关 >> 浮点数有效位
  详细解决方案

浮点数有效位

热度:507   发布时间:2007-11-11 15:57:20.0
浮点数有效位

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  

----------------解决方案--------------------------------------------------------

具体机制不清楚了,不过需要指出,在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位不精确
----------------解决方案--------------------------------------------------------
  相关解决方案