странный оператор деления в Groovy - PullRequest
9 голосов
/ 21 февраля 2011

Я новичок в 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 Ответ

12 голосов
/ 21 февраля 2011

В Groovy деление приводит к BigDecimal, если операнды имеют тип Integer, Long, BigInteger или BigDecimal:

См., Например, это руководство :

Операторы деления "/" и "/ =" выдают двойной результат, если любой из операндов является либо Float, либо Double, и BigDecimal, в противном случае (оба операндалюбая комбинация Integer, Long, BigInteger или BigDecimal).

[...]

Например

1/2 == new java.math.BigDecimal("0.5");

[...]

Целочисленное деление может быть выполнено для целых типов путем приведения результата деления .Например:

assert (int)(3/2) == 1I;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...