C (Си): Тип float

Тип float

В прошлом уроке мы вывели таблицу перевода температур, но у нее были две проблемы:

  1. Значения в столбцах выглядели неровно.
  2. Расчеты были неточными, потому что использовались только целые числа (int).

В этом уроке исправим обе.

Почему int недостаточно

Формула перевода:

C = (5 / 9) * (F - 32)

Для F = 0 правильный результат примерно -17.78, а не -17. Чтобы получить дробную часть, нужно перейти на тип float.

Переход на float

Меняем тип рабочих переменных:

float fahr;
float celsius;
float lower;
float upper;
float step;

Значения тоже удобно записывать как дробные:

lower = 0.0;
upper = 300.0;
step = 20.0;
fahr = lower;

Точная формула

С float можно безопасно использовать дробные коэффициенты:

celsius = (5.0 / 9.0) * (fahr - 32.0);

Так выражение считается в вещественной арифметике, без потери точности на целочисленном делении.

Форматирование вывода

Для float в printf() используем %f. Можно сразу задать ширину поля и количество знаков после запятой:

printf("%6.2f : %6.2f\n", fahr, celsius);
  • Значение 6 задает минимальную ширину поля.
  • Значение .2 задает два знака после запятой.
  • Спецификатор f указывает на вещественное число.

Полная программа

#include <stdio.h>

int main(void)
{
  float fahr;
  float celsius;
  float lower;
  float upper;
  float step;

  lower = 0.0;
  upper = 300.0;
  step = 20.0;
  fahr = lower;

  while (fahr <= upper) {
    celsius = (5.0 / 9.0) * (fahr - 32.0);
    printf("%6.2f : %6.2f\n", fahr, celsius);
    fahr = fahr + step;
  }

  return 0;
}

Итоги

  • Тип float нужен, когда важна дробная часть.
  • Формат %6.2f помогает выравнивать таблицу и ограничивать число знаков после запятой.
  • Вычисления с float дают более точный результат, чем с int в этой задаче.

Задание

Напишите программу km_to_mi, которая конвертирует километры в мили. Используйте такую формулу: мили = километры x 0.621.

Ваша программа должна использовать тип float и выводить значения в таком виде:

0.00 : 0.00
20.00 : 12.42
40.00 : 24.84
60.00 : 37.26
80.00 : 49.68
100.00 : 62.10
120.00 : 74.52
140.00 : 86.94
160.00 : 99.36
180.00 : 111.78
200.00 : 124.20
220.00 : 136.62
240.00 : 149.04
260.00 : 161.46
280.00 : 173.88
300.00 : 186.30

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются