C Перетворення типів
Перетворення типів
Іноді вам потрібно перетворити значення одного типу даних в інший тип. Це відоме як перетворення типу.
Наприклад, якщо ви спробуєте поділити два цілі числа, 5
на 2
, ви очікуєте, що результат буде 2,5
. Але оскільки ми працюємо з цілими числами (а не зі значеннями з плаваючою комою), наступний приклад виведе лише число 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
, чи не так?
Чому результат 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);
Спробуйте самі »