日期:2014-05-20  浏览次数:20632 次

float与double的精度问题
本帖最后由 zhq195w 于 2012-12-02 21:33:23 编辑
import java.lang.*;
class CRectangle{
    double width;
    double height;
}

public class hw8_3 {
    public static void main(String args[]){
        CRectangle rect1 = new CRectangle();
        
        rect1.width = 15.6;
        rect1.height = 10.8;
        System.out.println("area="+(rect1.width*rect1.height));
System.out.println("float的最大值:"+java.lang.Float.MAX_VALUE);
    }
}

如果我把width变量的类型改为float就会报错:可能损失精度。float的范围有那么大啊,这是怎么回事?
------解决方案--------------------
常量15.6被认为是double型的了,如果要想让它是float型的有两种方法
1.(float)15.6
2. 15.6f

把double型的值赋给float型的变量,所以就报错了
------解决方案--------------------
import java.lang.*;
class CRectangle{
    float width;
    float height;
}
 
public class hw8_3 {
    public static void main(String args[]){
        CRectangle rect1 = new CRectangle();
         
        rect1.width = 15.6;
        rect1.height = 10.8;
        System.out.println("area="+(rect1.width*rect1.height));
    System.out.println("float的最大值:"+java.lang.Float.MAX_VALUE);
    }
}

报错了:精度损失,怎么回事?
------解决方案--------------------
double 是双精度型的,float是单精度的,double 取得的范围大,大的数据传给小的float就会报错。