JavaRush /Курси /C# SELF /Вступ до дробових чисел і типу double

Вступ до дробових чисел і типу double

C# SELF
Рівень 6 , Лекція 2
Відкрита

1. Дробові числа

Згадаємо наш проєкт — нехай це найпростіший калькулятор або будь-яка програма, де потрібні обчислення: від простого підрахунку грошей до складної фізики. У реальному житті багато величин не є цілими числами — і це нормально.

Отже, озброїмося новим типом даних!

У програмуванні дробові числа ще називають дійсними, або числами з плаваючою крапкою (floating-point). У C#, як і в більшості мов, їх використовують для зберігання не лише цілих, а й «дробових» значень: усіляких 3.14, -28.57, 2.718281828

Дійсні числа поділяють на два основні типи:

Тип Зберігає Діапазон значень (приблизно) Точність Типовий розмір
float
Числа ±1.5 × 10-45 … ±3.4 × 1038 ~7 знаків після крапки 4 байти
double
Числа ±5.0 × 10-324 … ±1.7 × 10308 ~15–16 знаків після крапки 8 байтів

Тип float

Тип float отримав назву від floating-point number — числа з плаваючою крапкою. Дійсні числа — це математичні обʼєкти з певними властивостями, а компʼютер має багато обмежень. Тому некоректно називати дробові числа у C# дійсними: для них уживають назву «числа з плаваючою крапкою».

Тип float зазвичай зберігає 7 значущих цифр (наприклад, 0.1234567), порядок (ступінь) десятки й займає 4 байти памʼяті. Цього замало для точних обчислень, тож найчастіше використовують числа подвійної точності.

2. Оголошення та ініціалізація змінних типу double

Усе, як із int, тільки тепер використовуємо double.

// Оголошуємо змінну та присвоюємо їй значення Пі
double pi = 3.1415926;

// Можна оголосити й без ініціалізації
double averageSalary;
averageSalary = 91234.56;

// Можна обчислювати!
double pizzaPieces = 8;
double friends = 3;
double piecesPerFriend = pizzaPieces / friends; // 2.666... (а не 2)

Особливості синтаксису:

  • Як десятковий роздільник використовується крапка (3.14). Якщо використаєте кому — отримаєте помилку компіляції.
  • Суворо кажучи, якщо написати double d = 3;, помилки не буде — відбудеться неявне перетворення типів (ціле число перетвориться на дробове без втрати значення).

3. Введення та виведення дійсних чисел за допомогою Console

Спочатку спробуймо вивести дробове число:

double amount = 42.75;
Console.WriteLine(amount); // Виведе: 42.75

Усе гаразд! А якщо додати текст:

Console.WriteLine("На вашому рахунку: " + amount + " євро."); // На вашому рахунку: 42.75 євро.

Введення з клавіатури

Важливий момент: Console.ReadLine() завжди повертає рядок, тож його потрібно перетворити на тип double.

Console.WriteLine("Введіть температуру за вікном:");
string input = Console.ReadLine();
double temperature = double.Parse(input); // Перетворюємо рядок на double

Console.WriteLine("На вулиці зараз: " + temperature + " градусів.");

4. Тип double у дії: арифметика

Усі звичні операції (+, -, *, /) працюють так само, як і для int:

double distance = 100.5;
double time = 2.0;
double speed = distance / time; // 50.25

Console.WriteLine("Середня швидкість: " + speed); // Середня швидкість: 50.25

Це й уся арифметика. Єдина відмінність: результат ділення буде дробовим числом, якщо принаймні один з операндів має тип double.

Порівняємо з int

int a = 5, b = 2;
Console.WriteLine(a / b); // 2 (остача відкидається)

double aa = 5, bb = 2;
Console.WriteLine(aa / bb); // 2.5

5. Типові помилки та особливості під час роботи з double

Помилка перетворення рядка

Типова ситуація: користувач вводить 3,14, а програма очікує 3.14.

// Це викличе помилку, якщо введено "3,14"
double value = double.Parse(Console.ReadLine());

Якщо працювати з програмою в країнах, де кома — роздільник цілої та дробової частин (наприклад, Польща, Німеччина), то double.Parse спрацює нормально. Але якщо застосунок запущено з «англійськими» налаштуваннями, очікується крапка.

Неточність подання чисел у компʼютері

Тут у початківців зазвичай зʼявляється легке здивування:

double x = 0.1 + 0.2;
Console.WriteLine(x); // Хмм... 0.30000000000000004

Вітаємо, ви зіткнулися з «магією» подання дробових чисел усередині компʼютера. Річ у тім, що багато чисел неможливо точно подати у двійковій системі. Детальніше говоритимемо про це на наступній лекції. А зараз — не панікуйте! Для більшості застосунків це некритично, але у фінансах і точних науках є нюанси.

6. Важливо: double і int — автоматичне та явне перетворення

Буває, що ви додаєте ціле число до дробового або присвоюєте значення типу int змінній типу double — помилки не буде:

int i = 2;
double d = i; // Усе гаразд!
Console.WriteLine(d); // 2

double dd = 3.7;
int ii = (int) dd; // Потрібно явно перетворити тип double на тип int!
Console.WriteLine(ii); // 3, дробова частина відкинута

Часто це дивує: чому після перетворення дробова частина зникла? Тому що тип int не вміє зберігати дроби — усе, що після крапки, буде втрачено.

Детальніше про перетворення double у int і оператор (int) — у наступній лекції.

7. Форматоване виведення: охайно виводимо double

Часто за замовчуванням double виводиться із зайвими нулями. Можна відформатувати виведення:

double temp = 23.56789;
Console.WriteLine(temp); // 23.56789

Console.WriteLine(temp.ToString("F2")); // 23.57 (2 знаки після крапки)
Console.WriteLine($"{temp:F1}");        // 23.6 (інтерполяція рядків)
Формат Результат Опис
"F0" 24 Без дробової частини
"F2" 23.57 Два знаки після крапки
"F5" 23.56789 Пʼять знаків після крапки
2
Задача
C# SELF, 6 рівень, 2 лекція
Недоступна
Проста арифметика з типом `double`
Проста арифметика з типом `double`
2
Задача
C# SELF, 6 рівень, 2 лекція
Недоступна
Розрахунок швидкості
Розрахунок швидкості
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ