我是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]
答案 0 :(得分:12)
如果操作数的类型为BigDecimal
,Integer
,Long
或BigInteger
,那么如果操作数为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}}