给出奇怪输出的java双数字除法

给出奇怪输出的java双数字除法,java,Java,发现下面输出奇怪。真的吗 double rate = 11/12; // outputs 0.0 double rate = 11.00/12; // outputs 0.916666667; 为什么会有这么大的差异?在第一种情况下,第一次除法是这样做的,一个int除以一个int得到一个整数,即11/12=0,然后这个整数被转换为double。即,0.0。在第二种情况下,一个double(11.00)被一个整数(12)除。然后整数12被自动类型转换为double,因为类似类型的除法应该发生

发现下面输出奇怪。真的吗

double rate =  11/12; // outputs 0.0

double rate = 11.00/12; // outputs 0.916666667;

为什么会有这么大的差异?

在第一种情况下,第一次除法是这样做的,一个int除以一个int得到一个整数,即11/12=0,然后这个整数被转换为double。即,0.0。在第二种情况下,一个double(11.00)被一个整数(12)除。然后整数12被自动类型转换为double,因为类似类型的除法应该发生。此除法给出了实际精确的双值(0.91667)


参见此链接

在第一种情况下,进行第一次除法,使整数除以整数得到一个整数,即11/12=0,然后将该整数转换为双精度。即,0.0。在第二种情况下,一个double(11.00)被一个整数(12)除。然后整数12被自动类型转换为double,因为类似类型的除法应该发生。此除法给出了实际精确的双值(0.91667)


查看此链接

第一个您将速率设置为双精度,但为其分配了整数除法的链接。第二种情况下,您正在分割双精度。
double rate=11/12
对11/12(即0)进行整数除法,然后将其存储在
双精度数据类型中<代码>双倍费率=11.00/12这会进行浮点除法,因为表达式中至少有一个浮点数。因此,在求值之前,所有操作数都转换为最高精度<代码>双倍费率=(双倍)11/12
将给出类似的结果,因为我们显式地转换其中一个,从而强制进行浮点运算。第一个是速率为double,但分配了一个整数除法。第二种情况下,您正在分割双精度。
double rate=11/12
对11/12(即0)进行整数除法,然后将其存储在
双精度数据类型中<代码>双倍费率=11.00/12这会进行浮点除法,因为表达式中至少有一个浮点数。因此,在求值之前,所有操作数都转换为最高精度<代码>双倍费率=(双倍)11/12
将给出类似的结果,因为我们显式地转换其中一个,从而强制执行浮点运算。