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

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

Відкрита

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 Syntax Zero,  4 рівень,  9 лекція
Недоступна
Площа круга
Площа круга

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

4
Задача
Java Syntax Zero,  4 рівень,  9 лекція
Недоступна
Share a Coke
Share a Coke
Коментарі (26)
  • популярні
  • нові
  • старі
Щоб залишити коментар, потрібно ввійти в систему
Anonymous #3619820
Рівень 6
7 вересня 2025, 10:38
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 Навідник артилерійського в ЗСУ
16 грудня 2024, 10:09
блін, а де простір для творчості? що це завчання, коли тобі вказують: роби так, а внакше розстрєд! ф топку такий лохотрон. даний розв'язлк коректно працює, і з точки зору парадигм ява є більш бажаним, ніж всякі там збочення типу 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);
    }
Повиправляйте баги, а тоді просіть в людей бабло. не займайтеся лохотроном. і взагалі, зробіть нормальну систему перевірки, а не тупо збіглось з тим шо хоче моя ліва п'ятка, чи ні.
Юрій
Рівень 2
8 січня 2025, 10:04
Шановна навідник артилерії, ви, я бачу, знаєте дуже багато ресурсів, кращих за цей, щоб писати своє невдоволення тут і мати за думку, що ви повинні вирішувати - брати бабло з наданих курсів чи ні. Якщо вам щось не подобається, ніхто вас тут не тримає.
ZSUnix Навідник артилерійського в ЗСУ
16 грудня 2024, 09:52
Альо, одміни, шо за фігня? цікаво, щож виводить моя прога? це напевно не ціле число? мабуть воно вигадане, чи може це взагалі якийсь об'єкт?
ZSUnix Навідник артилерійського в ЗСУ
16 грудня 2024, 09:37
А нахіба займатися збоченням: d = a * 1.0 / b? А бозя ДЛЯ ЧОГО ПРИДУМАЛА конструкцію (double) ?
int a = 100500;
int b = 3;
double d = a / (double)b;
і тепер нам глибоко по фен-шую, яку зі зміних перевести в дробну.
Pavlo
Рівень 8
11 травня 2024, 14:19
як на мене це є справжнісенький костиль: double d = a * 1.0 / b; А кажуть js дивний, за таке по рукам бити треба)))
Тимур
Рівень 3
3 березня 2024, 12:55
Заметка для интересующихся: на Западе в качестве разделителя в дробном числе принята точка, а в наших регионах запятая. Английский: floating point number; Украинский: число з плаваючою комою; Русский: число с плавающей запятой.
IronMan57
Рівень 28
18 листопада 2024, 23:52
Походження назви цього типу данних вказано правильно. Тільки справа не в Заході-Сході, а в традиціях кожної країни. В Німеччині, чи Франції дробову частину, як і в нас відділяють комою, в Японії та Китаї - крапкою, а в Канаді - можна і так, і так.
Anastasia
Рівень 28
11 червня 2023, 13:50
Чому в цьому виразі змінна x зберігає значення 11? double a = 5.999; int b = 2; int x = (int)(a * b);
Vitalii
Рівень 10
21 червня 2023, 02:26
в мене таке саме запитання 😅
SeVans
Рівень 6
23 червня 2023, 11:51
тому що спершу йде множення змінних a і b, яке дає в результаті 11,998, а вже потім ти приводиш його до типу int що означає щи всі знаки після коми відсікаються і в результаті x = 11
hidden #3500645
Рівень 30
17 жовтня 2024, 18:38
SeVans, дякую, бо трошки голову зламала, чому х не 10, а 11, спочатку подумала, що опечатка 👍👍
Oleh
Рівень 7
30 березня 2023, 12:29
Так просто після попередніх задач що аж страшно)
Yevhenii
Рівень 17
16 грудня 2022, 17:50
😁
Yevhenii
Рівень 17
16 грудня 2022, 17:50
🙂