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
де ім'я — це ім'я змінної. Приклади:
Команда | Опис |
---|---|
|
Створюється змінна дійсного типу price |
|
Створюється змінна дійсного типу weight |
|
Створюється змінна дійсного типу lightSpeed |
Для створення кількох змінних типу double
, так само, як і для типу int
, можна використовувати скорочений формат:
double ім'я1, ім'я2, ім'я3;
double
Крім того, можна відразу присвоювати їм значення:
double ім'я1 = значення1, ім'я2 = значення2, ім'я3 = значення3;
double
Приклади:
Команда | Примітка |
---|---|
|
У змінній зберігається значення 5.0 |
|
У змінній зберігається значення 2.0 |
|
3. Присвоювання цілих і дійсних чисел
Якби цілі числа можна було присвоювати тільки змінним типу int
, а дійсні — тільки змінним типу double
, це було б дуже погано. Для зручності нам потрібна можливість перетворювати тип числа з одного на інший. У мові Java така можливість є.
По-перше, змінним типу double
можна присвоювати як дійсні, так і цілі числа. Коли присвоюються цілі числа, вони просто перетворюються на дійсні. Проте в цьому разі часом дещо знижується точність.
Команда | Примітка |
---|---|
|
У змінній зберігається значення 5.0 |
|
У змінній зберігається значення 2.0 |
|
У змінній x зберігається значення 1000000.0 |
По-друге, якщо певний виразі містить і ціле, і дійсне числа, то спочатку ціле перетворюється на дійсне, після чого з ним виконуються операції вже як із дійсним числом.
Команда | Примітка |
---|---|
|
У змінній x зберігається значення 5000.0 |
|
На екран буде виведено число 10 |
|
На екран буде виведено число 10.0 |
І нарешті, існує можливість присвоювати змінним типу int
дійсні числа. Дробова частина числа в цьому разі відкидається — число округлюється до меншого цілого.
Крім того, компілятор вимагає, щоб цю операцію було задокументовано в явному вигляді (для того щоб інші програмісти розуміли, що тут відбувається відкидання дробової частини). Загальний вигляд цього виразу в коді:
змінна_цілого_типу = (int)(дійсне_число);
int
Приклади:
Команда | Примітка |
---|---|
|
У змінній x зберігається значення 5 |
|
У змінній x зберігається значення 5 |
|
У змінній 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;
Зверніть увагу, що операції множення й ділення мають однаковий пріоритет і виконуються зліва направо, тому має значення, де саме відбувається операція множення на дійсну одиницю.
Приклади:
Команда | Порядок виконання | Результат |
---|---|---|
|
(1.0 * a) / b; |
2.5 |
|
(a * 1.0) / b; |
2.5 |
|
(a / b) * 1.0; |
2.0 |
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ