Java - Что не так с этим кодом инициализации переменной? - PullRequest
1 голос
/ 05 февраля 2012

Я написал следующее, но Java это не нравится!

int limit = Math.round(Math.sqrt(inputNumber));

В предложениях из моей среды IDE добавлено приведение (int) справа, но я былсоздается впечатление, что Math.round все равно отформатирует число в целое число?

Ответы [ 3 ]

4 голосов
/ 05 февраля 2012

Math.sqrt(x) возвращает double. Есть несколько перегруженных Math.round функций. Тот, который принимает double в качестве аргумента, возвращает long, а не int.

0 голосов
/ 05 февраля 2012

Поскольку Math.sqrt возвращает double, вызывается версия Math.round, которая возвращает long, но вы хотите поместить ее в int, таким образом, предложение IDE.

0 голосов
/ 05 февраля 2012

См. API java.lang.Math

статический длинный: круглый (двойной a)static int: round (float a)

static double: sqrt (double a)

Math.sqrt возвращает double .Когда вы отправляете double в Math.round, он возвращает long .Итак, Math.round(Math.sqrt(inputNumber)) возвращает long, и вы должны привести его к целому числу.

...