我刚刚开始使用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
左右的括号,该怎么办?怎么做?
答案 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中默认为int
,
i / 3
将根据int计算计算,当得到结果(0)时,将应用强制转换。
答案 3 :(得分:0)
int/int
被视为整数除法,为您提供整数结果。
分子或分母中的任何一个必须是double
才能给出小数答案。
答案 4 :(得分:0)
最简单的方法如下: (i / 3.0)
(int / int)此处的除法将被视为整数除法
(int / dbl)或(dbl / int)或(dbl / dbl)此处的除法将被视为浮点除法。