Типы int для всплытия перед делением. Какие броски мне действительно нужны, а какие можно удалить и почему? - PullRequest
0 голосов
/ 07 ноября 2018

При делении на целые числа, и я хочу, чтобы результат был плавающим, я могу получить что-то вроде этого.

float ratio = landscape ? 
              ((float) image.getWidth()) / ((float)image.getHeight()) : 
              ((float)image.getHeight()) / ((float)image.getWidth());

Однако я думаю, что мне не нужен каждый бросок. При погружении иногда кажется, что авто кастуется. Каковы правила, когда это происходит?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Для каждого деления вам нужно только 1.
Так и должно быть:

float ratio = landscape ?
              ((float)image.getWidth() / image.getHeight()) :
              ((float)image.getHeight() / image.getWidth());
0 голосов
/ 07 ноября 2018

Вам нужно разыграть не менее одного операнда на деление. Другой операнд будет повышен автоматически.

Я бы лично извлек локальные переменные, но в этот момент все это неявно (вот почему у меня был комментарий):

// Use floating point promotion to avoid integer division
float width = image.getWidth();
float height = image.getHeight();
float ratio = landscape ? width / height : height / width;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...