Java - 表达式中的类型转换问题

时间:2015-05-17 12:18:42

标签: java

我刚刚开始使用Java并练习一些示例程序。以下是我正在尝试的代码。

/*
   Using a cast
 */
class UseCast {
    public static void main(String agrs[]) {

        int i;
        double d;

        for (i = 0; i < 5; i++) {
            System.out.println(i + " / 3 with cast to double is " + (double) i
                    / 3);

            // > Why is the parenthesis around (i / 3) changing the result
            System.out.println(i + " / 3 with cast to double is "
                    + (double) (i / 3));
            System.out.println();

        }
    }
}

第一个输出按预期工作。 在第二个输出中,(i / 3)似乎首先被评估为整数,然后被提升为双倍打印。如果我想将表达式计算为double并仍保留i / 3左右的括号,该怎么办?怎么做?

5 个答案:

答案 0 :(得分:1)

如果没有类型转换,你可能应该做类似下面的事情:

System.out.println(i + " / 3 with cast to double is "
                + (i / 3d));

对于你的情况,你是对的,它的int/int除法,然后你输入加倍,这没有任何区别。

答案 1 :(得分:0)

你当然可以

((double) i / 3) 

答案 2 :(得分:0)

如果你坚持将演员表保留在整个表达式之外,你可以将i或3中的一个乘以1.0:

(double) (i * 1.0 / 3)

但是现在演员阵容是多余的,因为表达式已经被评估为double

您获得的结果是因为Java中默认为inti / 3将根据int计算计算,当得到结果(0)时,将应用强制转换。

答案 3 :(得分:0)

int/int被视为整数除法,为您提供整数结果。 分子或分母中的任何一个必须是double才能给出小数答案。

答案 4 :(得分:0)

最简单的方法如下: (i / 3.0)

(int / int)此处的除法将被视为整数除法

(int / dbl)或(dbl / int)或(dbl / dbl)此处的除法将被视为浮点除法。