НАЙКРАЩИЙ САЙТ ДЛЯ ВЕБ-РОЗРОБНИКІВ
Мова програмування C. Уроки W3Schools для початківців українською мовою

En Es De

C Перетворення типів


Перетворення типів

Іноді вам потрібно перетворити значення одного типу даних в інший тип. Це відоме як перетворення типу.

Наприклад, якщо ви спробуєте поділити два цілі числа, 5 на 2, ви очікуєте, що результат буде 2,5. Але оскільки ми працюємо з цілими числами (а не зі значеннями з плаваючою комою), наступний приклад виведе лише число 2:

Приклад

int x = 5;
int y = 2;
int sum = 5 / 2;

printf("%d", sum); // Виведе 2
Спробуйте самі »

Щоб отримати належний результат, вам потрібно знати, як працює перетворення типів.

У мові C є два типи перетворення:

  • Неявне перетворення (автоматично)
  • Явне перетворення (вручну)

Неявне перетворення

Неявне перетворення автоматично виконується компілятором, коли ви призначаєте значення одного типу іншому.

Наприклад, якщо ви призначаєте значення int типу float:

Приклад

// Автоматичне перетворення: int у float
float myFloat = 9;

printf("%f", myFloat); // 9.000000
Спробуйте самі »

Як бачите, компілятор автоматично перетворює int-значення 9 на значення float 9.000000.

Це може бути ризиковано, оскільки в певних ситуаціях ви можете втратити контроль над певними значеннями.

Особливо, якби це було навпаки — наступний приклад автоматично перетворює float значення (з плаваючою комою) 9,99 на int значення (ціле) 9:

Приклад

// Автоматичне перетворення: float у int
int myInt = 9.99;

printf("%d", myInt); // 9
Спробуйте самі »

Що сталося з .99? Можливо, нам знадобляться ці дані в нашій програмі! Тому будьте обережні. Важливо знати, як компілятор працює в таких ситуаціях, щоб уникнути неочікуваних результатів.

Як інший приклад, якщо ви розділите два цілі числа: 5 на 2, ви знаєте, що сума становить 2,5. І як ви знаєте з початку цієї сторінки, якщо ви зберігаєте суму як ціле число, результат відображатиме лише число 2. Тому було б краще зберігати суму як float або double, чи не так?

Приклад

float sum = 5 / 2;

printf("%f", sum); // 2.000000
Спробуйте самі »

Чому результат 2,00000, а не 2,5? Ну, це тому, що 5 і 2 все ще є цілими числами в діленні. У цьому випадку вам потрібно вручну перетворити цілі значення на значення з плаваючою комою. (Дивись нижче).


Явне перетворення

Явне перетворення виконується вручну шляхом розміщення типу в дужках () перед значенням.

Враховуючи нашу проблему з прикладу вище, тепер ми можемо отримати правильний результат:

Приклад

// Перетворення вручну: int у float
float sum = (float) 5 / 2;

printf("%f", sum); // 2.500000
Спробуйте самі »

Ви також можете розмістити тип перед змінною:

Приклад

int num1 = 5;
int num2 = 2;
float sum = (float) num1 / num2;

printf("%f", sum); // 2.500000
Спробуйте самі »

І оскільки ви дізналися про "десяткову точність" у попередньому розділі, ви можете зробити вихід ще чистішим, видаливши додаткові нулі (якщо хочете):

Приклад

int num1 = 5;
int num2 = 2;
float sum = (float) num1 / num2;

printf("%.1f", sum); // 2.5
Спробуйте самі »

Приклад із реального життя

Ось приклад із реального життя, де ми створюємо програму для обчислення відсотка результату користувача по відношенню до максимального результату в грі:

Приклад

// Встановіть максимальний можливий бал у грі 500
int maxScore = 500;

// Фактична оцінка користувача
int userScore = 420;

/* Обчисліть відсоток оцінки користувача по відношенню до максимально доступної оцінки.
Перетворіть userScore на float, щоб переконатися, що поділ точний */
float percentage = (float) userScore / maxScore * 100.0;

// Надрукуйте відсоток
printf("User's percentage is %.2f", percentage);
Спробуйте самі »