Groovy 如果结果声明为double,则除法返回意外的0

Groovy 如果结果声明为double,则除法返回意外的0,groovy,types,Groovy,Types,从下面的代码 x = 2 / 5 double y = 2 / 5 double z = 2.0 / 5 println(String.format("%f %f %f", x, y, z)) 我们得到了输出 0.4 0.0 0.4 为什么y的值是0.0?这种不直观行为的原因是什么?因为将两个整数2和5相除会得到结果0,然后将其转换为双精度。可能是因为2/5是一个整数除法,返回0,然后将其转换为双精度吗?但是,为什么x不是0?但是,为什么x是0.4?在这个问题中,他们提到如果你不声明一个类型

从下面的代码

x = 2 / 5
double y = 2 / 5
double z = 2.0 / 5
println(String.format("%f %f %f", x, y, z))
我们得到了输出

0.4 0.0 0.4

为什么y的值是0.0?这种不直观行为的原因是什么?

因为将两个整数2和5相除会得到结果0,然后将其转换为双精度。

可能是因为2/5是一个整数除法,返回0,然后将其转换为双精度吗?但是,为什么x不是0?但是,为什么x是0.4?在这个问题中,他们提到如果你不声明一个类型,它将使用反射来计算类型,所以它可能是这样的,反射得到除法的类型为double,可能它首先计算表达式,然后赋值。在第二种情况下,它已经声明为double,并且不需要对其运行反射,它将除法作为两个整数。