double и float — примитивные дробные типы Java для хранения чисел с плавающей точкой. double обычно используется по умолчанию, а float требует суффикс f у литерала. Важно помнить, что такие числа хранятся приближённо: из‑за двоичного представления возможны неожиданные хвосты в вычислениях и сравнениях. В этом уроке: синтаксис, приведение типов и типичные ошибки. Практика — задачи Java онлайн, тренировка и тесты.
- Литералы:
3.14vs3.14f - Приведение:
(float),(double) - Осторожно с точным сравнением
- Модуль 1: Первая программа и структура
- Модуль 2: Переменные и типы данных
- Объявление и инициализация переменных.
- Примитивы: целые числа (int, long, byte, short).
- Примитивы: дробные числа (double, float).
- Примитивы: логический тип (boolean).
- Примитивы: символьный тип (char).
- String — основы работы со строками.
- Приведение типов (Casting): расширение и сужение.
- Область видимости переменных (Scope).
- Модуль 3: Операторы
- Модуль 4: Управляющие конструкции
- Модуль 5: Массивы и Строки (Advanced)
- Создание и заполнение массива.
- Доступ к элементам по индексу.
- Свойство length и перебор массива.
- Цикл for-each для массивов.
- Многомерные массивы.
- Методы String: length, charAt, isEmpty.
- Манипуляции: substring, concat, replace.
- Сравнение строк: equals vs ==.
- Разделение строк (split) и trim.
- StringBuilder (изменяемые строки).
- Модуль 6: Методы
- Модуль 7: Классы и Объекты (ООП Часть 1)
- Модуль 8: Капсуляция и Модификаторы
- Модуль 9: Наследование и Полиморфизм (ООП Часть 2)
- Модуль 10: Обработка исключений
- Модуль 11: Коллекции и Дженерики
- Модуль 12: Функциональный стиль (Java 8+)
- Модуль 13: Полезные стандарты
1. Литерал для float
Дополните фрагмент программы на Java так, чтобы объявления переменных типа float были корректными. Сейчас дробные литералы записаны без специального суффикса, поэтому компилятор будет воспринимать их как значения другого типа. Ваша задача — дописать нужный суффикс в отмеченные места, чтобы код успешно компилировался и переменные действительно имели тип float.
public class FloatLiteralExample {
public static void main(String[] args) {
float price = 19.99input1S; // добавьте суффикс, чтобы литерал стал float
float discount = 0.1input2S; // тот же суффикс нужен и здесь
float finalPrice = price - discount;
System.out.println(finalPrice);
}
}2. Явное приведение к float
В Java переменная типа double занимает 64 бита, а float — только 32 бита. Поэтому прямое присваивание значения типа double переменной типа float приводит к ошибке компиляции (possible lossy conversion). Чтобы код скомпилировался, необходимо выполнить явное (принудительное) приведение типа с помощью оператора (float). Заполните пропуски, добавив нужное приведение к типу float в указанных местах. После правильного приведения программа должна скомпилироваться и вывести значения переменных без потери точности, допустимой для типа float.
public class FloatCasting {
public static void main(String[] args) {
double d1 = 123.456;
double d2 = 789.0123456789;
// Требуется явное приведение к float
float f1 = input1S d1;
// Ещё одно место, где нужно привести double к float
float f2 = input2S (d1 + d2);
System.out.println("f1 = " + f1);
System.out.println("f2 = " + f2);
}
}3. Исправь ошибку: дробный литерал по умолчанию double
В этом фрагменте Java-кода переменная типа float инициализируется дробным литералом, записанным с ошибкой. Из-за этого программа не компилируется и компилятор сообщает о возможной потере точности. Найдите строку с неправильным присваиванием и исправьте её так, чтобы тип литерала соответствовал типу переменной и код успешно запустился.
public class Main { public static void main(String[] args) { float price = 19.99; System.out.println("Price: " + price); }}4. Выбери подходящий тип: float или double
В фрагменте Java-кода с пропусками нужно выбрать из выпадающего списка подходящий тип с плавающей точкой (float или double) и при необходимости суффикс числового литерала. Заполните все пропуски так, чтобы код компилировался и отражал требуемую точность и назначение переменных.
public class FloatDoubleDemo {
public static void main(String[] args) {
// Для числа Пи нужна максимальная доступная точность
input1S pi = 3.141592653589793input2S;
// Для цены товара достаточно меньшей точности и экономии памяти
input3S price = 19.99input4S;
// Очень маленькое значение, которое тоже можно хранить в меньшем типе
input5S tiny = 1.0e-40input6S;
}
}5. Собери пример вычислений с double
Из предложенных строк кода соберите корректную Java-программу, которая объявляет несколько переменных типа double, выполняет вычисление с использованием операций деления и сложения и выводит полученный результат в консоль. Обратите внимание, что среди фрагментов есть лишние строки, их не нужно включать в итоговое решение.
public class Main { public static void main(String[] args) { double distanceKm = 42.0; double hours = 3.5; double speed = distanceKm / hours + 2.0; System.out.println(speed); }} float speed = 10.0f; System.out.println(hours); double result = 100 / 3;6. Результат при приведении типов
Проанализируйте фрагмент кода на Java, в котором выполняются операции с типами double и float, затем результат вычислений приводится к типу int и выводится в консоль. Учтите, что при явном приведении дробного числа к целому дробная часть отбрасывается, а не округляется. Выберите строку, которая будет напечатана в результате выполнения программы.
class Main {
public static void main(String[] args) {
double a = 5.0 / 2; // 2.5
float b = (float) a; // 2.5f
float c = b * 2.9f; // 7.25f
int result = (int) c; // ?
System.out.println(result);
}
}7. Сопоставь литерал и его тип
В этом задании тренажёра по Java в левой колонке приведены числовые литералы и простые выражения с плавающей точкой, а в правой — краткие пояснения с указанием их примитивного типа. Сопоставьте каждый литерал или выражение слева с соответствующим описанием типа справа.
3.143.14f0.0d1e101F1f + 2.01.0f + 2.0f8. Отметь все float-литералы
Перед вами фрагмент программы на Java с объявлениями переменных и вычислениями. В коде встречаются разные числовые литералы: целые, double и float. Ваша задача — внимательно просмотреть код и выделить только те числовые литералы, которые являются литералами типа float. То есть выберите только десятичные числа, записанные с суффиксом f или F, и не выделяйте остальные числа.
public class FloatLiteralsExample {
public static void main(String[] args) {
float price = {{19.99f~|~t1}};
float discount = {{0.15F~|~t2}};
double taxRate = {{0.2~|~t3}};
double total = price * (1 - discount) * (1 + taxRate);
float temperature = {{-5.0f~|~t4}};
int count = {{3~|~t5}};
double distance = {{42.195~|~t6}};
float result = price + temperature;
System.out.println(result);
}
}