JavaRush /Курси /Java Syntax Zero /Тип double — дійсні числа

Тип double — дійсні числа

Java Syntax Zero
Рівень 4 , Лекція 9
Відкрита

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

Для створення кількох змінних типу double, так само, як і для типу int, можна використовувати скорочений формат:

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

Коментарі (27)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Anonymous #3619820 Рівень 6
7 вересня 2025

package ua.javarush.task.pro.task04.task0416;

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        int a = console.nextInt();
        int b = console.nextInt();
        double c = a * 1.0 / b;
        System.out.println(c);

    }
}
ZSUnix Рівень 10
16 грудня 2024
блін, а де простір для творчості? що це завчання, коли тобі вказують: роби так, а внакше розстрєд! ф топку такий лохотрон. даний розв'язлк коректно працює, і з точки зору парадигм ява є більш бажаним, ніж всякі там збочення типу radius*radius.
 
public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int r = sc.nextInt();
        sc.close();
        int s = (int)(Math.PI * Math.pow(r, 2));
        System.out.println(s);
    }
 
Повиправляйте баги, а тоді просіть в людей бабло. не займайтеся лохотроном. і взагалі, зробіть нормальну систему перевірки, а не тупо збіглось з тим шо хоче моя ліва п'ятка, чи ні.
Юрій Рівень 1
8 січня 2025
Шановна навідник артилерії, ви, я бачу, знаєте дуже багато ресурсів, кращих за цей, щоб писати своє невдоволення тут і мати за думку, що ви повинні вирішувати - брати бабло з наданих курсів чи ні. Якщо вам щось не подобається, ніхто вас тут не тримає.
ZSUnix Рівень 10
16 грудня 2024
Альо, одміни, шо за фігня? цікаво, щож виводить моя прога? це напевно не ціле число? мабуть воно вигадане, чи може це взагалі якийсь об'єкт?
ZSUnix Рівень 10
16 грудня 2024
А нахіба займатися збоченням: d = a * 1.0 / b? А бозя ДЛЯ ЧОГО ПРИДУМАЛА конструкцію (double) ?
 
int a = 100500;
int b = 3;
double d = a / (double)b;
 
і тепер нам глибоко по фен-шую, яку зі зміних перевести в дробну.
Pavlo Рівень 8
11 травня 2024
як на мене це є справжнісенький костиль: double d = a * 1.0 / b; А кажуть js дивний, за таке по рукам бити треба)))
Тимур Рівень 3
3 березня 2024
Ещё не ясно почему используется название "дійсне число" по отношению к дробному "дробовому" числу. Ведь вещественные числа это и "1", и "-1", "0,5" и "0,999999е". Разве нет? Цитата: "Действительные числа — это обширная категория чисел, которая включает в себя различные типы, такие как десятичные дроби, дроби, целые числа, а также рациональные и иррациональные числа. Целые числа — это подмножества или типы действительных чисел, которые состоят из всех целых чисел, как положительных, так и отрицательных, на числовой прямой." с сайта: askanydifference.com
Тимур Рівень 3
3 березня 2024
Заметка для интересующихся: на Западе в качестве разделителя в дробном числе принята точка, а в наших регионах запятая. Английский: floating point number; Украинский: число з плаваючою комою; Русский: число с плавающей запятой.
IronMan57 Рівень 28
18 листопада 2024
Походження назви цього типу данних вказано правильно. Тільки справа не в Заході-Сході, а в традиціях кожної країни. В Німеччині, чи Франції дробову частину, як і в нас відділяють комою, в Японії та Китаї - крапкою, а в Канаді - можна і так, і так.
Anastasia Рівень 12
11 червня 2023
Чому в цьому виразі змінна x зберігає значення 11? double a = 5.999; int b = 2; int x = (int)(a * b);
Vitalii Рівень 10
21 червня 2023
в мене таке саме запитання 😅
SeVans Рівень 6
23 червня 2023
тому що спершу йде множення змінних a і b, яке дає в результаті 11,998, а вже потім ти приводиш його до типу int що означає щи всі знаки після коми відсікаються і в результаті x = 11
hidden #3500645 Рівень 30
17 жовтня 2024
SeVans, дякую, бо трошки голову зламала, чому х не 10, а 11, спочатку подумала, що опечатка 👍👍
Oleh Рівень 7
30 березня 2023
Так просто після попередніх задач що аж страшно)
Yevhenii Рівень 17
16 грудня 2022
😁