2
public static void main(String[] args) {
        double firstDouble = 1.8d;
        double secondDouble = 1.65d;


        float firstFloat = 1.8f;
        float secondFloat = 1.65f;
        System.out.println("DOUBLE SUM : "+(firstDouble + secondDouble));
        System.out.println("FLOAT SUM :"+(firstFloat + secondFloat));

        System.out.println("DOUBLE SUM"+firstDouble + secondDouble);
        System.out.println("FLOAT SUM"+firstFloat + secondFloat);
    }

OUT PUT:

DOUBLE SUM : 3.45
FLOAT SUM :3.4499998

DOUBLE SUM :1.81.65
FLOAT SUM :1.81.65

我的问题

1)在第一组输出中,为什么它给出不同的值3.453.4499998相同的值 2)在第二组输出中,为什么输出与第一次输出不同。

提前致谢...

4

4 回答 4

1

System.out.println("DOUBLE SUM"+firstDouble + secondDouble);

这里参数作为一个String. 加/加运算符用作字符串连接。括号具有更高的优先级,因此首先进行评估。

第一个问题已经回答了。请在这里找到

于 2013-05-17T04:37:40.537 回答
0

这非常有用: http: //floating-point-gui.de/languages/java/

简短的回答是,在处理浮点数时尝试使用BigDecimal 。

BigDecimal a = new BigDecimal("1.8");
BigDecimal b = new BigDecimal("1.65");
BigDecimal c = a.add(b); // returns a BigDecimal representing exactly 3.45
于 2013-05-17T04:57:20.890 回答
0

在第二组中,您错过了括号,它在System.out.println语句“Double sum”和“Float sum”中对字符串执行其他操作,因此在算术表达式中添加括号以获得正确的结果。

System.out.println("DOUBLE SUM : "+(firstDouble + secondDouble));
System.out.println("FLOAT SUM :"+(firstFloat + secondFloat));

System.out.println("DOUBLE SUM"+ (firstDouble + secondDouble));
System.out.println("FLOAT SUM"+(firstFloat + secondFloat));

这给

DOUBLE SUM 3.45
FLOAT SUM 3.4499998
DOUBLE SUM 3.45
FLOAT SUM 3.4499998
于 2013-05-17T04:29:12.467 回答
0

1)因为浮点数不够精确,无法以优于 (3.45-3.4499998)=2E-7 http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html的精度计算总和#jls-4.2.3

2)"DOUBLE SUM"+firstDouble将 firstDouble 转换为 String 并连接它们,然后连接 secondDouble。当您输入 ( ) 时,它首先计算总和并将结果连接到“DOUBLE SUM”

于 2013-05-17T04:33:45.940 回答