我是新手,你可能会告诉我们,请向初学者澄清以下代码如何剪切输出-2.50作为答案。就int而言,我仍然对推广/降级主题感到非常困惑。双
int x = 5;
double y = 2.5;
double q = x / 10 - y;
System.out.printf("%.2f\n",q);
我看到它的方式是:double q = 5.0(x从int提升为double)/ 10.0 - 2.5 这将等于0.5 - 2.5 = -2.00(小数点后2位因为"%。2f \ n")
为什么正确答案为-2.50而不是-2.00?
答案 0 :(得分:4)
X是一个整数,x / 10的值将产生0而不是0.5(因为x和10都是int)。如果你做x / 10.0,则输出为0.5。
答案 1 :(得分:2)
您也可以像这样编写表达式:
double q = (x / 10) - y;
现在在括号内没有双打,所以它是一个纯int
- 除法,它给出了5 / 10 = 0
。之后你有
double q = 0 - y;
现在,int
与double
之间存在差异。这是从(int)0
到(double)0.0
的促销活动。
最终结果将是
double q = 0.0 - 2.5; //q == -2.5
答案 2 :(得分:1)
double q = x / 10 - y;
在此,因为除法具有比减法更高的优先级,因此x/10
将首先执行,并且在这里我们划分两个整数(不管存储最终答案的变量是双倍的事实),所以答案将是整数,即5/10 = 0然后减去int和double将完成(这里int将被提升为double)。所以现在有效的是0.0 - 2.5,因此答案是-2.50
答案 3 :(得分:0)
double q = x / 10f - y;
x / 10 // it will be thought as int