Примитивы: дробные числа (double, float)

Тренажер по Java для пользователей с начальным уровнем подготовки.

Тренажер по Java

double и float — примитивные дробные типы Java для хранения чисел с плавающей точкой. double обычно используется по умолчанию, а float требует суффикс f у литерала. Важно помнить, что такие числа хранятся приближённо: из‑за двоичного представления возможны неожиданные хвосты в вычислениях и сравнениях. В этом уроке: синтаксис, приведение типов и типичные ошибки. Практика — задачи Java онлайн, тренировка и тесты.

  • Литералы: 3.14 vs 3.14f
  • Приведение: (float), (double)
  • Осторожно с точным сравнением
Список тем

1. Литерал для float

id: 40434_fp_01_replace_float_literal

Дополните фрагмент программы на 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);
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Явное приведение к float

id: 40434_fp_02_replace_casting

В 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 сек.
Показать подсказку

3. Исправь ошибку: дробный литерал по умолчанию double

id: 40434_fp_03_error_double_default

В этом фрагменте Java-кода переменная типа float инициализируется дробным литералом, записанным с ошибкой. Из-за этого программа не компилируется и компилятор сообщает о возможной потере точности. Найдите строку с неправильным присваиванием и исправьте её так, чтобы тип литерала соответствовал типу переменной и код успешно запустился.

Найдите ошибку и исправьте
public class Main {
    public static void main(String[] args) {
        float price = 19.99;
        System.out.println("Price: " + price);
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Выбери подходящий тип: float или double

id: 40434_fp_04_select_fill_types

В фрагменте 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;
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Собери пример вычислений с double

id: 40434_fp_05_build_from_parts_declare_compute

Из предложенных строк кода соберите корректную 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;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

6. Результат при приведении типов

id: 40434_fp_06_predict_result_cast

Проанализируйте фрагмент кода на 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. Сопоставь литерал и его тип

id: 40434_fp_07_compare_literals

В этом задании тренажёра по Java в левой колонке приведены числовые литералы и простые выражения с плавающей точкой, а в правой — краткие пояснения с указанием их примитивного типа. Сопоставьте каждый литерал или выражение слева с соответствующим описанием типа справа.

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
3.14
3.14f
0.0d
1e10
1F
1f + 2.0
1.0f + 2.0f
значение примитивного типа float (литерал с суффиксом f)
значение примитивного типа double (десятичный литерал без суффикса)
значение примитивного типа float (литерал с заглавным суффиксом F)
значение примитивного типа double (литерал с суффиксом d)
значение примитивного типа double (экспоненциальная форма без суффикса)
результат выражения примитивного типа double (участвует double-операнд)
результат выражения примитивного типа float (операции только над float)
Сообщения
Проверить
Показать подсказку

8. Отметь все float-литералы

id: 40434_fp_08_click_target_float_parts

Перед вами фрагмент программы на 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);
    }
}
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру