Типы данных с плавающей точкой: float и double — введение в Java #005

float и double

Числа с плавающей точкой

Для хранения дробных чисел в Java используют float и double. Правильное название - простые типы данных с плавающей точкой. Примитивные типы данных — byte, short, int, long мы рассматривали здесь.

Давайте сразу посмотрим практический пример:

  1. public class Intdiv {
  2.     public static void main(String[] args) {
  3.         int a, b , c;
  4.         a = 1;
  5.         b = 10;
  6.         c = a / b;
  7.         System.out.println(c);
  8.     }
  9. }

При делении единицы на десять мы получаем ноль целых и при значении типа данных int после и... больше ничего не будет. Но если мы при инициализации переменных изменим их тип на double, то мы получим привычное нам 0.1.

В простейшей примере можно увидеть работу double ещё раз.

  1. public class HalloDouble {
  2.     public static void main(String[] args) {
  3.         final double PI = 3.14;
  4.         // final - используется для "финализации" переменной,
  5.         // теперь переменной PI нельзя присвоить другое значение.
  6.         double r = 5.5;
  7.         double k = r * r;
  8.         double s = PI * r * r;
  9.         System.out.println(k);
  10.         // промежуточный результат
  11.         System.out.println(s);
  12.     }
  13. }

Тип Максимальное позитивное значение Минимальное позитивное значение Размер (бит)
float 3.4028234663852886E+038 1.4012984643248171E-045 32
double 1.7976931348623157E+308 4.9406564584124654E-324 64

Давайте попробуем сделать программу, которая считает степень двойки.

  1. public class HalloDouble {
  2.     public static void main(String[] args) {
  3.         double a = 2;
  4.         double b = 30;
  5.         double c = Math.pow(a, b);
  6.         System.out.println(c);
  7.         // Выводит на экран 1.073741824E9
  8.     }
  9. }

Достаточно интересный вопрос, что происходит при пересечении разных типов данных?
Что произойдёт, если тип переменных int встретится с double?
Я подготовил программу без единой строчки комментария. В которой можно попытаться предугадать то, что Java выведет на экран.

  1. public class IntToDouble {
  2.     public static void main(String[] args) {
  3.  
  4.         int var1 = 5;
  5.         int var2 = 2;
  6.         int var3 = var1 / var2;
  7.  
  8.         double var4 = 5.0;
  9.         double var5 = 2.0;
  10.         double var6 = var4 / var5;
  11.         double var7 = var1 / var2;
  12.  
  13.         double var25 = var1 / var4;
  14.  
  15.         System.out.println("Int Var3 = " + var3);
  16.         System.out.println("double Var6 = " + var6);
  17.         System.out.println("double Var7 = " + var7);
  18.         System.out.println("double Var25 = " + var25);
  19.  
  20.         int var11 = (int) (var1 / var4);
  21.  
  22.         System.out.println("Int Var11 = "+ var11);
  23.         System.out.println("Магия " + 5.0/var2);
  24.     }
  25. }

Результат работы IntToDouble:

  1. Int Var3 = 2
  2. double Var6 = 2.5
  3. double Var7 = 2.0
  4. double Var25 = 1.0
  5. Int Var11 = 1
  6. Магия = 2.5

Результат работы подтверждает, что int находится в пределах double и легко может использоваться в расчётах, где результатом будет число типа double. К сожалению обратное невозможно. Мы должны преобразовать тип данных - Casting. int var11 = (int) (var1 / var4), где инт в скобках и есть преобразование.

Домашнее задание:
Написать программу расчёта роста денежного клада в банке.
Сумма вклада 100€, время вклада 7 лет, ежегодный процент роста вклада 2,3%. Вывести результат на экран за каждый год в виде:

  1. Сумма вклада в конце первого года = a
  2. Сумма вклада в конце второго года = b
  3. Сумма вклада в конце NN года = c
  4. Доход за Y лет составил = d
  5. При расчёте пользоваться *float* и ответить на следующие вопросы:
  6. Используя какие типы данных можно решить эту задачу? Почему? Что произойдёт при использовании типа данных byte?

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и абзацы переносятся автоматически.
Target Image