почему приведение к (int) это верное решение?
т.е. почему приведение к int это округление числа в меньшую сторону, видимо об этом где то говорилось но я пропустил. - подсмотрел у кого то такое решение.
лично я нагугли Math.floor() .
REM
29 уровень
Количество точек равно distance, округленному (в меньшую сторону) до целого числа.
Решен
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Justinian Judge в Mega City One Master
18 мая 2019, 20:36решение
округления не происходит.
Происходит ЯВНОЕ приведение переменной типа double к инту путем ОТБРАСЫВАНИЯ дробной части, пусть это будет хоть 4.9999. Оно станет 4 и так должно быть, мы как программисты должны понимать что инт целочисленный тип, дабл вещественные числа, чем они отличаются? Наличием дробной частью. Что такое инт? Дабл без дробной части. Как получить инт с дабла? Отбросить дробную часть. Все логично.
Логика округления должна задаваться явно когда она должна быть, а она нужна не всегда.
здесь же, выражение при участии узкого типа и более широкого.
Для того чтобы не терять точность почем зря, компилятор сделает неявное приведение типов и расширит инт i до дабла.
The compiler doesn't want you to lose precision unless you specifically ask to, so any time either the dividend or the divisor is a double, it will do double division.
Widening primitive conversion is applied to convert either or both operands as specified by the following rules. The result of adding Java chars, shorts or bytes is an int:
If either operand is of type double, the other is converted to double.
Otherwise, if either operand is of type float, the other is converted to float.
Otherwise, if either operand is of type long, the other is converted to long.
Otherwise, both operands are converted to type int
+4
REM
19 мая 2019, 06:54
Спасибо за разъяснение!
... с английским плоховато, поэтому исхожу из того что перевел гуглтранслейт:)
если один из значений double то конвертируется в double . Получается что выражение i < distance; при данных i = 4; distance = 4.99 будет рассмотрено в double
4.0 < 4.99 = true верно?
Т.е. я делаю вывод что при сравнении разных типов приведение проходит к большему типу, дабы не терять данные.
Еще раз спасибо ! я разобрался.
+1