Java原始类型促销混乱

时间:2016-01-20 07:10:01

标签: java numbers

我是新手,你可能会告诉我们,请向初学者澄清以下代码如何剪切输出-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?

4 个答案:

答案 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;

现在,intdouble之间存在差异。这是从(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