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

Так само, як і з типом 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

Коментарі (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);
    }
 
Повиправляйте баги, а тоді просіть в людей бабло. не займайтеся лохотроном. і взагалі, зробіть нормальну систему перевірки, а не тупо збіглось з тим шо хоче моя ліва п'ятка, чи ні.
Юрій Рівень 16
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
😁