В первом уроке мы рассмотрели целочисленный (int) тип данных. Все операции, которые можно проводить с этими числами, также целочисленные (а деление производится с остатком).
Для проведения операций с дробными числами обычно используется тип double:
double t = 36.6;
System.out.println(t + 0.2); // 36.8
При делении целых чисел дробная часть отбрасывается. Чтобы этого не происходило, нужно записать делимое или делитель как double, а не int. Это можно сделать, представив число как десятичную дробь (например, 7.0) или с буквой d на конце (например, 7d):
System.out.println(7/4);
// целые числа по умолчанию int.
// Поэтому в результате деления отбросится дробная часть и выведется 1
System.out.println(7.0/4);
// представляем 7 как десятичную дробь, выводится результат 1.75
System.out.println(7d/4);
// представляем 7 как число типа double, результат — 1.75
System.out.println(7/4d);
// представляем 4 как число типа double, результат — 1.75
Числовые значения, которые здесь присваиваются переменным, называются литералами. 7 и 4 — это литералы типа int, а 36.6, 7.0, 7d, 4d — литералы типа double.
В числовых литералах допускается разделять разряды знаком подчёркивания, например, сорок тысяч можно записать в рублях как 40000 или 40_000, а в копейках — как 4000000 или 40_000_00 (хоть 4_0_0_0_0_0_0, но не надо так).
Если в арифметическом выражении попадаются данные разных типов, они приводятся к тому, у которого больший диапазон значений, то есть в выражении 7.0 / 4, где данные имеют типы double и int соответственно, 4 приводится к типу double перед операцией деления.
Следует учитывать, что вычисления с плавающей точкой имеют некоторую погрешность, причём различающуюся на разных компьютерах. Поэтому, если нужно провести денежные вычисления, используют выражения с целым количеством копеек, а не дробным количеством рублей. Например, если нужно вычислить выражение 1 000 рублей/7, это считается как 100 000 копеек/7, чтобы погрешность на разных компьютерах не различалась.