Преобразование целых и вещественных чисел
Проблемы точности
«Преобразование целых и вещественных чисел» — бесплатный урок C Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C Academy содержит 4 уроков всего.
Два мира чисел
В C есть целые числа — точные, без дробной части — и числа с плавающей точкой — приближённые, с дробной частью. Преобразование между ними меняет способ хранения значения.
#include <stdio.h>
int main(void) {
int i = 10;
double d = 10.5;
printf("%d %.1f\n", i, d);
return 0;
}Расширение int до double
Большинство значений int точно представимы в double, поэтому расширение безопасно.
#include <stdio.h>
int main(void) {
int n = 1000;
double d = n;
printf("d = %.1f\n", d);
return 0;
}Сужение double до int
Преобразование из double в int отбрасывает дробную часть в сторону нуля и может привести к потере информации.
#include <stdio.h>
int main(void) {
double d = 12.75;
int n = (int)d;
printf("n = %d\n", n);
return 0;
}Усечение отрицательных чисел
Усечение к нулю означает, что -2.9 превращается в -2, а не в -3.
#include <stdio.h>
int main(void) {
double d = -2.9;
int n = (int)d;
printf("n = %d\n", n);
return 0;
}Точность float и double
float хранит около 7 значащих цифр, а double — около 15. Преобразование double в float приводит к потере точности.
#include <stdio.h>
int main(void) {
double d = 3.14159265358979;
float f = (float)d;
printf("%.5f\n", f);
return 0;
}Преобразование большого int в float
Очень большое значение int может быть неточно представлено в float, что приводит к округлённому результату.
#include <stdio.h>
int main(void) {
int big = 16777217;
float f = (float)big;
printf("%.1f\n", f);
return 0;
}Округление и усечение
Явное преобразование выполняет усечение. Чтобы округлить положительное значение, сначала добавьте 0.5 или используйте библиотечные функции.
#include <stdio.h>
int main(void) {
double d = 4.6;
int truncated = (int)d;
int rounded = (int)(d + 0.5);
printf("%d %d\n", truncated, rounded);
return 0;
}Расчёт среднего
Для усреднения целых чисел необходимо деление с плавающей точкой, чтобы сохранить дробную часть.
#include <stdio.h>
int main(void) {
int sum = 7, count = 2;
double avg = (double)sum / count;
printf("avg = %.2f\n", avg);
return 0;
}Проблема сравнения чисел с плавающей точкой
Поскольку числа с плавающей точкой являются приближёнными, сравнивать их с помощью == рискованно. Сравнивайте их с небольшой допустимой погрешностью.
#include <stdio.h>
#include <math.h>
int main(void) {
double a = 0.1 + 0.2;
if (fabs(a - 0.3) < 1e-9)
printf("close enough\n");
return 0;
}Смешивание типов в условиях
При сравнении int с double значение int продвигается, поэтому сравнение выполняется в формате с плавающей точкой.
#include <stdio.h>
int main(void) {
int n = 3;
double d = 3.5;
if (n < d)
printf("3 < 3.5\n");
return 0;
}Выбор подходящего типа
Используйте целые числа для счётчиков и индексов, а числа с плавающей точкой — для измерений и отношений.
#include <stdio.h>
int main(void) {
int items = 4;
double pricePer = 2.5;
printf("total = %.2f\n", items * pricePer);
return 0;
}Быстрая проверка
Проверьте своё понимание преобразований целых чисел и чисел с плавающей точкой.
Итоги: преобразования целых чисел и чисел с плавающей точкой
Вы узнали, как числа меняются при преобразовании между типами.
- Преобразование int в double обычно безопасно расширяет значение
- Преобразование double в int усекает значение в сторону нуля
- float хранит меньше цифр, чем double
- Округляйте, добавляя 0.5 или используя библиотечные вызовы
- Избегайте
==для чисел с плавающей точкой; используйте допустимую погрешность
Часто задаваемые вопросы
Урок «Преобразование целых и вещественных чисел» бесплатный?
Да — полный текст урока «Преобразование целых и вещественных чисел» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C Academy, подпишись на CoddyKit PRO. Курс C Academy содержит 4 уроков всего.
Чему я научусь в уроке «Преобразование целых и вещественных чисел»?
Проблемы точности Ты практикуешь C Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C Academy?
Предыдущий опыт не требуется. C Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Преобразование целых и вещественных чисел»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C Academy?
Да. Каждый урок C Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Неявные преобразования
- Явные приведения
- Преобразование целых и вещественных чисел
- Ошибки преобразования