Groovy中奇怪的除法运算符

时间:2011-02-21 07:25:28

标签: groovy

我是Groovy的新手。

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

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

int x = a[(lo+hi)/2]
assert x == 3

虽然没关系:

int x = a[(int)(lo+hi)/2]

int i = (lo+hi)/2
int x = a[i]

1 个答案:

答案 0 :(得分:12)

如果操作数的类型为BigDecimalIntegerLongBigInteger,那么如果操作数为BigDecimal,则除法会产生1/2 == new java.math.BigDecimal("0.5");

例如参见this tutorial

  

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

     

[...]

     

例如

assert (int)(3/2) == 1I;
     

[...]

     

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

{{1}}