Дробные числа
Дробные числа нужны, когда важна часть после запятой: длина, время, скорость, площадь и т.п.
Тип
В Java для дробных значений обычно используют double.
Деление
Деление double / double сохраняет дробную часть.
Если оба числа целые (int), сначала выполняется целочисленное деление.
int a = 7;
int b = 3;
System.out.println(a / b); // 2
System.out.println(a / 3.0); // 2.3333333333333335
System.out.println((double) a / b); // 2.3333333333333335
Смешанные выражения
Если в выражении есть и int, и double, результат становится double.
Округление и вывод
Для округления часто используют Math.round, Math.floor, Math.ceil.
double x = 3.56;
System.out.println(Math.round(x)); // 4
System.out.println(Math.floor(x)); // 3.0
System.out.println(Math.ceil(x)); // 4.0
Для вывода с фиксированным количеством знаков удобно printf.
Примеры
Среднее арифметическое:
double a = 10.0;
double b = 20.0;
double c = 25.0;
double avg = (a + b + c) / 3.0;
System.out.println(avg);
Процент от числа:
Тип
В C++ для дробных значений обычно используют double.
Деление
double / double сохраняет дробную часть.
Если оба числа целые (int), деление будет целочисленным.
int a = 7;
int b = 3;
std::cout << (a / b) << "\n"; // 2
std::cout << (a / 3.0) << "\n"; // 2.33333...
std::cout << (static_cast<double>(a) / b) << "\n";
Округление и вывод
Округление: std::round, std::floor, std::ceil (заголовок <cmath>).
double x = 3.56;
std::cout << std::round(x) << "\n"; // 4
std::cout << std::floor(x) << "\n"; // 3
std::cout << std::ceil(x) << "\n"; // 4
Вывод с фиксированным количеством знаков: std::fixed и std::setprecision (заголовок <iomanip>).
double p = 3.141592653589793;
std::cout << std::fixed << std::setprecision(2) << p << "\n"; // 3.14
std::cout << std::fixed << std::setprecision(4) << p << "\n"; // 3.1416
Примеры
Среднее арифметическое:
double a = 10.0;
double b = 20.0;
double c = 25.0;
double avg = (a + b + c) / 3.0;
std::cout << avg << "\n";
Перевод градусов в радианы:
Если M_PI недоступен, можно взять acos(-1.0):
Тип
В Python дробные числа – это float.
Деление
Оператор / всегда даёт дробный результат.
Округление и вывод
Округление: round(x).
Вывод с количеством знаков часто делают через форматирование.
Примеры
Среднее арифметическое:
Перевод градусов в радианы:
Тип дробных чисел
| Язык | Тип | Где часто спотыкаются |
|---|---|---|
| Java | double |
целочисленное деление int / int даёт int |
| C++ | double |
целочисленное деление int / int даёт int |
| Python | float |
/ всегда дробное, а // – целая часть |
Как получить дробный результат при делении целых
Java: сделать один операнд double.
C++: сделать один операнд double.
int a = 7, b = 3;
std::cout << (a / 3.0) << "\n";
std::cout << (static_cast<double>(a) / b) << "\n";
Python: / уже даёт дробный результат.
Вывод с количеством знаков после запятой
Java: printf("%.2f").
C++: std::fixed << std::setprecision(2).
Python: f"{x:.2f}".
Во всех трёх языках double/float хранят число приближённо, поэтому сравнение дробных чисел на точное равенство часто даёт неожиданные результаты.