0Pricing
C Academy · Урок

Преобразование целых и вещественных чисел

Проблемы точности

«Преобразование целых и вещественных чисел» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Неявные преобразования
  2. Явные приведения
  3. Преобразование целых и вещественных чисел
  4. Ошибки преобразования
← Назад к C Academy