Округление до целого в Си
Быстрый старт в С++
Бесплатная небольшая книга, которую не надо читать полгода, но которая покажет вам, что такое С++ и как начать его изучение. А также поможет решить, надо ли вам это вообще. Кроме того, подписавшись на рассылку, вы будете получать от меня полезные материалы по С++, которые я периодически выпускаю... Подробнее... |
В С/С++, как и в других языках программирования, не так всё просто при работе с числами. Новички часто сталкиваются с неожиданностями при выполнении, казалось бы, простых математических операций.
Например, у нас есть три переменных:
int n1 = 1, n2 = 2, n3 = 2;
И мы хотим вычислить среднее значение. Понятно, что среднее значение здесь будет вещественным числом,
поэтому мы объявляем переменную типа float
, а затем пытаемся присвоить ей результат соответствующей математической операции:
float x; x = (n1 + n2 + n3) / 3;
Поскольку 1 + 2 + 2 = 5
, то логично предположить, что после этого х
будет равно 1,666.
Ну там ещё будут знаки после запятой - сейчас пока это неважно.
Однако, когда мы выведем х
на экран, то сильно удивимся, потому что на экране мы увидим число 1. Какого хрена?
Но это ещё ничего. А вот если вы сделаете так:
x = n1/3 + n2/3 + n3/3;
то х
вообще окажется равен 0.
А всё дело в том, что переменные n1, n2, n3
имеют целочисленный тип. Поэтому результат выражения
(n1 + n2 + n3) / 3
тоже будет целочисленным. А при целочисленном делении остаток от деления
просто отбрасывается, и число 1,666 превращается в 1 (а во втором варианте в 0). Поэтому для таких случаев
недостаточно объявить переменную х
как float
. Все переменные, используемые в выражении,
также должны иметь тип float
или другой вещественный.
Но что делать, если переменные уже объявлены и по каким-то причинам менять их тип вы не хотите? В этом случае надо в выражении явно преобразовать целый тип в вещественный. Сделать это можно для каждой переменной отдельно или для всего выражения. Например, так:
x = float(n1 + n2 + n3) / 3;
В этом случае всё отработает так, как мы хотели, и после выполнения операции в х
будет число 1,66667 (ну или близкое к этому - зависит от компилятора и от типов данных).
Так что как видите, в таком заковыристом языке, как С++, можно сделать самому себе труднонаходимую ошибку на пустом месте. Так что будьте внимательны.
Если что-то осталось непонятно, см. видео:
Вступить в группу "Основы программирования"
Подписаться на канал в РУТУБ Подписаться на Дзен-канал Подписаться на рассылки по программированию |
Все способы изучить С++
Начинающие программисты даже не догадываются о том, какой огромный пласт в этой области скрыт от их глаз, и чего многие из новичков не увидят никогда, потому что это тёмная сторона программирования - чистый исходный код системного уровня… Подробнее... |
Помощь в технических вопросах
Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее... |