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 |
Так же, как и с типом int, можно использовать краткую запись для создания нескольких переменных типа double:
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 |
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Math.PIрешение не засчитывается.