Почему литерал типа double (подходящий для float) не авто-преобразовывается во float?

107
11 марта 2021, 15:10

Почему литерал типа double (подходящий для float) не авто-преобразовывается в float? Но при этом, аналогичным образом, подходящий литерал int авто-преобразовывается в byte, short?

    byte a = 1; // литарел типа int, к byte еденица подходит – всё работает
    float b = 1.0; // Ошибка: "Несоответствие типов: невозможно преобразовать double в float". Но ситуация аналогична команде выше!

Хотелось бы понять логику, соответствующую и первой и второй команде.

Answer 1

По умолчанию, литерал 1.0 имеет тип double. Автоматически преобразовать тип double во float нельзя, потому-что может быть утрачена точность числа (точность типа float меньше, чем типа double). Следует явно указать преобразование типов для переменных. Для литералов можно указывать суффикс f или F, например:

    float b = 1.0f;
    float c = 1.0F;
    double d = 1.0;
    float e = (float) d;
    float f = (float) 1.0; // так тоже можно
    float f = dF; // так нельзя, суффикс F применим только к литералам
READ ALSO
java.sql.SQLException: Access denied for user 'root'@'ip' (using password: YES)

java.sql.SQLException: Access denied for user 'root'@'ip' (using password: YES)

не помогло and others didnt help? i work with phpmyAdmin? help me(другие случаи не работают) когда была локальная базаданных, все работало нормально, вот ссылка

179
Замена переменных

Замена переменных

Совсем новичок в Java, изучаю конструкторы и классыКак-бы встретилась проблема с выводом при "перезапуске" программы

88
Проверка первого символа строки

Проверка первого символа строки

Мне нужно вывести первый символ и проверить, чем он являетсяГде-то подсмотрел, что можно использовать str

116
Зацикленное нажатие по кнопке

Зацикленное нажатие по кнопке

Есть одна кнопка в вконтакте, как сделать её зацикленное нажатие с неким интервалом через Console в Ctrl+Shift+C? Раньше находил такой для добавления...

79