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