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


Комментарии (372)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Yaroslav Yaroslav Уровень 4
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 решение не засчитывается.
Роман Зарубин Уровень 8
26 ноября 2025
работаем
Anton Zorin Уровень 20
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 и автоматический к нему приводится....
Anonymous #3585174 Уровень 33
30 мая 2025
good
name Уровень 13
10 апреля 2025
после циклов прям чувствуется некий опыт в решение простейших задач)) прям облегчение,что обучение идет не просто так ибо когда то и такую простейшую задачу бы не решила
Alina Gabidulina Уровень 27
12 апреля 2025
о, какеин на аве, напиши мне в телегу @ahahara , будем вместе учиться)
Сергей Сак Уровень 16
2 апреля 2025
Так же, как и с типом int, можно использовать краткую запись для создания нескольких переменных типа double:
Но в предыдущих лекциях не было такой информации про int! Верните недостающие лекции!
ame Уровень 4
24 июля 2025
2 уровень 3я лекция....🙄
Сергей Сак Уровень 16
31 июля 2025
Думаешь?
Dmitry Terekhov Уровень 23
17 августа 2025
была и еще как
qwwq 1 Уровень 24
1 апреля 2025
a*b = 11.998, При преобразовании вещественного числа 11.998 к целочисленному типу данных происходит округление с отбрасыванием дробной части, то есть округляется чисто не по правилам математики, а простым "выкидыванием" хвоста, который идет после точки.
BEATNGU Уровень 23
1 апреля 2025
double a = 5.999; int b = 2; int x = (int)(a * b); Объясните, почему х выводит значение 11?
Адепте Щао Уровень 6
5 апреля 2025
ну 5.999 умножить на 2 выйдет 11.998, а вот эта команда которая переводит double в int она просто выкидывает хвост, то есть 0.998 полностью улетает. и как раз остается 11.
Artur Уровень 5
27 марта 2025
Вот это релакс.....
2 июня 2025
Согласен, даже чувство ловлю, мол так легко, не деградирую ли я из за легкости )) там где рост, там всегда головоломки.