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 Пʼять знаків після крапки
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ