JavaRush /Курсы /Java Syntax Pro /Тип double - вещественные числа

Тип double - вещественные числа

Java Syntax Pro
4 уровень , 6 лекция
Открыта

1. Тип double

Для работы с вещественными (дробными) числами в Java используется тип double. В памяти он занимает 8 байт (в два раза больше, чем тип int) и может хранить значения в диапазоне -1.7*10308 до +1.7*10308. Для сравнения: тип int может хранить значение в диапазоне -2*109 до +2*109.

В вещественных числах дробная часть записывается после точки. Например, 123.456, или 2.5, или 100.00 или 0.01. Такие числа еще называют числами с плавающей точкой — floating point number – компьютерное название для вещественных чисел.

Кстати, кроме типа double есть еще вещественный тип float (размером всего 4 байта). Его название как раз и происходит от floating point. Название же double происходит от double float. Тип double в два раза больше, чем float: 8 байт против 4. Его еще называют вещественное число двойной точности.


2. Создание переменной типа double

Тип double используется для хранения вещественных чисел. Чтобы создать в коде переменную, которая будет способна хранить вещественные числа, нужно воспользоваться командой:

double имя;
Создание переменной типа double

Где имя — это имя переменной. Примеры:

Команда Описание
double price;
Создается вещественная переменная price
double weight;
Создается вещественная переменная weight
double lightSpeed;
Создается вещественная переменная lightSpeed

Так же, как и с типом int, можно использовать краткую запись для создания нескольких переменных типа double:

double имя1, имя2, имя3;
Создание нескольких переменных типа double

И даже сразу присваивать им значения:

double имя1 = значение1, имя2 = значение2, имя3 = значение3;
Создание и инициализация нескольких переменных типа double

Примеры:

Команда Примечание
double price = 5.0;
В переменной хранится значение 5.0
double weight = 2;
В переменной хранится значение 2.0
double x = 1.0, y = 2.0, z = 3.0;

3. Присваивание целых и вещественных чисел

Было бы плохо, если бы целые числа можно было присваивать только переменным типа int, а вещественные — только переменным типа double. Хотелось бы иметь возможность преобразовывать одни числа в другие. И в Java такая возможность есть.

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

Команда Примечание
double price = 5.0;
В переменной хранится значение 5.0
double weight = 2;
В переменной хранится значение 2.0
int t = 1000;
double x =  t * t;

В переменной x хранится значение 1000000.0

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

Команда Примечание
int t = 1000;
double x = t * 5.0;

В переменной x хранится значение 5000.0
System.out.println(5 * 2);
На экран будет выведено число 10
System.out.println(5 * 2.0);
На экран будет выведено число 10.0

И наконец, есть возможность присваивать переменным типа int вещественные числа. Дробная часть числа при этом отбрасывается — число округляется вниз до целого.

Также компилятор требует, чтобы этот факт программист задокументировал явно (чтобы другие программисты понимали, что тут происходит отбрасывание дробной части). Общий вид этого выражения в коде такой:

целочисленная_переменная = (int)(вещественное_число);
Присваивание переменной типа int вещественного числа

Примеры:

Команда Примечание
int x = (int)(5.5);
В переменной x хранится значение 5
double a = 5.999;
int x = (int)(a);
В переменной x хранится значение 5
double a = 5.999;
int b = 2;
int x = (int)(a * b);
В переменной x хранится значение 11


4. Деление целых и вещественных чисел в Java

При делении целого числа на целое остаток всегда отбрасывается. Как же тогда, скажем, поделить 5 на 2, чтобы получить 2.5?

Поначалу кажется, что правильный вариант такой:

double d = 5 / 2;

Однако не все так просто. Дело в том, что Java-машина сначала вычислит значение выражения 5 / 2 и только потом присвоит результат в переменную d. А деление 5 / 2 выполнится нацело. Т.е. d будет содержать 2 или, если быть более точным, 2.0

Правильный вариант такой: хотя бы одно из чисел, участвующих в делении, нужно записать как вещественное (т.е. с точкой):

double d = 5.0 / 2;
double d = 5 / 2.0;
double d = 5.0 / 2.0;

В любом из этих выражений d будет содержать значение 2.5

А как же быть с переменными? Что если у нас есть такой код:

int a = 5;
int b = 2;
double d = a / b;

Тут есть хитрое (и очевидное) решение — заставить Java-машину преобразовать переменные в вещественные, умножив их на вещественную единицу — 1.0

int a = 5;
int b = 2;
double d = a * 1.0 / b;

Обратите внимание, что у операций умножения и деления равный приоритет, и они выполняются слева направо, поэтому имеет значение, где именно мы умножаем на вещественную единицу.

Примеры:

Команда Порядок выполнения Результат
int a = 5;
int b = 2;
double d = 1.0 * a / b;
(1.0 * a) / b; 2.5
int a = 5;
int b = 2;
double d = a * 1.0 / b;
(a * 1.0) / b; 2.5
int a = 5;
int b = 2;
double d = a / b * 1.0;
(a / b) * 1.0; 2.0


Комментарии (379)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Tais Уровень 2
28 мая 2026
интересно, что умножать на 1.0 не обязательно, можно превратить целое в вещественное командой (double)

public class Solution {
    public static void main(String[] args) {
        //напишите тут ваш код
        Scanner sc = new Scanner(System.in);
        int coke = sc.nextInt();
        int progers = sc.nextInt();
        //double result = (double)coke / progers;
        System.out.println((double)coke / progers);
    }
}
Anonymous #6463865 Уровень 10
5 мая 2026

// Разделим ящик колы на кабинет программистов. Для этого напишем
// программу, в которой нужно ввести с клавиатуры два целых числа.
// Первое число - количество банок колы в ящике. Второе - количество
// людей в кабинете. Вывести на экран результат деления первого
// числа на второе. Результатом должно быть вещественное число.

Scanner console = new Scanner(System.in);
int banki = console.nextInt();
int ludi = console.nextInt();
double result = 1.0 * banki / ludi;
System.out.println(result);
Anonymous #6463865 Уровень 10
4 мая 2026

Scanner console = new Scanner(System.in);
int radius = console.nextInt();
double pi = 3.14;
int S = (int)(pi * radius * radius);
System.out.println(S);
Vlad Lipski Уровень 23
17 февраля 2026
не могу(
Michael's Уровень 32
16 февраля 2026
просто оставлю здесь комментарий, чтоб потом кто то смог увидеть до какого уровня я смог дойти
Иван Иванов Уровень 30
12 февраля 2026
почему этот код не работает в решении второй задачи, пишет про какую то закрывающую скобку, ниче не понял public class Solution { public static void main(String[] args) { Scanner scanner = new scanner(system in); int a = 3; int b = 2; double c = a + b / b * 1.0; System.out.printin(result); } }
Yaroslav Yaroslav Уровень 38
15 января 2026
Почему этот вариант не прошел?

        Scanner sc = new Scanner(System.in);
        int radius = sc.nextInt();

        int area = (int) Math.floor(Math.PI * radius * radius);

        System.out.println(area);
А этот прошел.

        Scanner sc = new Scanner(System.in);
        int radius = sc.nextInt();

        int area = (int) Math.floor(3.14 * radius * radius);

        System.out.println(area);
Тоесть при использовании константы Math.PI решение не засчитывается.
lagar322 Уровень 14
18 января 2026
Очевидно, что у Math.PI больше знаков после запятой. Это легко проверить, если вывести его в консоль:

System.out.println(Math.PI);
Значение Math.PI = 3.141592653589793
Роман Зарубин Уровень 8
26 ноября 2025
работаем
Anton Zorin Уровень 32
13 августа 2025
Апкаст (неявное приведение, расширяющее) int → double (без потери данных, т. к. double шире int): java int a = 10; double b = a; // Автоматическое приведение (апкаст) System.out.println(b); // 10.0 Даункаст (явное приведение, сужающее) double → int (возможна потеря данных, т. к. дробная часть отбрасывается): java double c = 15.99; int d = (int) c; // Явное приведение (даункаст) System.out.println(d); // 15 (дробная часть потеряна)
2 июня 2025
Решение первой задачи:
 
        Scanner sc = new Scanner (System.in);
        int radius = sc.nextInt();    
        System.out.println((int)(radius*3.14*radius));            

 
Решение второй задачи:
 
       Scanner sc = new Scanner (System.in);
       double numberOfBottles = (double)sc.nextInt();
       int numberOfProgrammers = sc.nextInt();  
       System.out.println(numberOfBottles/numberOfProgrammers); 

 
ame Уровень 4
24 июля 2025
Можно не приводить целое число к вещественному типу (double), т.к само это число сохраняется в переменную типа double и автоматический к нему приводится....