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 имя;
Где имя — это имя переменной. Примеры:
Команда | Описание |
---|---|
|
Создается вещественная переменная price |
|
Создается вещественная переменная weight |
|
Создается вещественная переменная lightSpeed |
Так же, как и с типом int
, можно использовать краткую запись для создания нескольких переменных типа double
:
double имя1, имя2, имя3;
И даже сразу присваивать им значения:
double имя1 = значение1, имя2 = значение2, имя3 = значение3;
Примеры:
Команда | Примечание |
---|---|
|
В переменной хранится значение 5.0 |
|
В переменной хранится значение 2.0 |
|
3. Присваивание целых и вещественных чисел
Было бы плохо, если бы целые числа можно было присваивать только переменным типа int
, а вещественные — только переменным типа double
. Хотелось бы иметь возможность преобразовывать одни числа в другие. И в Java такая возможность есть.
Во-первых, переменным типа double
можно присваивать как вещественные, так и целые числа. При присваивании целых чисел они просто преобразовываются в вещественные. Хотя иногда при этом возможна небольшая потеря точности.
Команда | Примечание |
---|---|
|
В переменной хранится значение 5.0 |
|
В переменной хранится значение 2.0 |
|
В переменной x хранится значение 1000000.0 |
Во-вторых, если в каком-то выражении участвуют целое и вещественное число, целое сначала преобразуется в вещественное и только потом взаимодействует с другим вещественным числом.
Команда | Примечание |
---|---|
|
В переменной x хранится значение 5000.0 |
|
На экран будет выведено число 10 |
|
На экран будет выведено число 10.0 |
И наконец, есть возможность присваивать переменным типа 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 |
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ