Groovy中奇怪的除法运算符

hin*_*int 9 groovy

我是Groovy的新手.

为什么这会在运行时抛出异常:

int[] a = [1,2,3,4,5]
int lo=0
int hi=4

int x = a[(lo+hi)/2]
assert x == 3
Run Code Online (Sandbox Code Playgroud)

虽然这些都可以:

int x = a[(int)(lo+hi)/2]
Run Code Online (Sandbox Code Playgroud)

int i = (lo+hi)/2
int x = a[i]
Run Code Online (Sandbox Code Playgroud)

aio*_*obe 12

在一个常规的分割结果BigDecimal,如果操作数的类型的Integer,Long,BigIntegerBigDecimal:

例如,请参阅本教程:

如果操作数是Float或Double,则除法运算符"/"和"/ ="产生Double结果,否则产生BigDecimal结果(两个操作数都是Integer,Long,BigInteger或BigDecimal的任意组合).

[...]

例如

1/2 == new java.math.BigDecimal("0.5");
Run Code Online (Sandbox Code Playgroud)

[...]

可以通过转换除法的结果对整数类型执行整数除法.例如:

assert (int)(3/2) == 1I;
Run Code Online (Sandbox Code Playgroud)

  • 所有数值类型也支持`intdiv()`方法,它允许你在不进行转换的情况下进行整数除法,例如`assert 3.intdiv(2)== 1I` (3认同)