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

一个运算不报错也不出结果


public class Test2 {


public static void main(String[] args) {
double d = 0;
double sum = 0;
while(d != 10) {
d += 0.1;
sum += sum + d;

}
System.out.println(sum);
}
}




这题的sum为什么出不来结果?也不报错。貌似变成了死循环。
有些疑惑,求解答。
------解决方案--------------------
double的精度造成的
你把d 的值打印出来看看就知道了。
------解决方案--------------------
    public static void main(String[] args) {
        final double DELTA = 0.0001;
        double d = 0;
        double sum = 0;

        // 浮点数相等的比较,是在一个范围内,而不是直接使用 ==
        while (Math.abs(d - 10) > DELTA) {
            d += 0.1;
            sum += d;
        }

        System.out.println(sum);
    }

------解决方案--------------------
d是Double类型的,应该是不可能等于10,所以while()里相当为true,所以形成死循环了!你可以在while里打印一下,看不到10.