Раздел: Стандартные функции Паскаля
Функция Round
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее... |
Функция Round в Паскале округляет значение с плавающей точкой до ближайшего целого числа. Синтаксис:
function Round(X: ValReal) : Int64;
Функция Round округляет Х до ближайшего целого числа и возвращает значение, которое может быть как меньше, так и больше исходного значения вещественного числа Х.
О типе ValReal я рассказывал здесь.
Правило округления числа
Округление вещественного числа Х выполняется по следующему правилу:
- Если дробная часть числа Х меньше 0.5, то число Х округляется в меньшую сторону.
- Если дробная часть числа Х больше 0.5, то число Х округляется в большую сторону.
- Если дробная часть числа Х равна 0.5, то используется особый принцип округления числа, так называемое “Банковское округление”. То есть когда число округляется всегда в сторону чётного числа.
Примеры округления чисел
Исходя из вышесказанного функция Round будет возвращать следующие результаты при округлении чисел:
Round(55.3) = 55 Round(55.6) = 56 Round(55.5) = 56 Round(56.5) = 56
Ну и напоследок пример программы:
program funcround; {$mode objfpc}{$H+} var x : Real; y, z : integer; begin y := 100; x := 55.7; //z := y + x; //!!! Неправильно z := y + Round(x); //Правильно, z = 156 WriteLn(z); WriteLn('Round(55.3) = ', Round(55.3)); WriteLn('Round(55.6) = ', Round(55.6)); WriteLn('Round(55.5) = ', Round(55.5)); WriteLn('Round(56.5) = ', Round(56.5)); ReadLn; end.
Обратите внимание в примере на закомментированную строку. Так делать нельзя, потому что в Паскале не допускается присваивать целочисленным переменным вещественные значения.
Поэтому, если необходимо сложить две переменных - целую и вещественную, а результат поместить в целую, то надо использовать какую-либо из подпрограмм преобразования типов. Например, функцию Round.
Также обратите внимание, что функция Round возвращает число типа Int64. Этот тип НЕ является порядковым типом данных. Это значит, что по идее функцию Round нельзя использовать в конструкциях, требующих применения порядковых типов. Например, с оператором case.
То есть по идее компилятор должен выдать ошибку, если в вашей программе будет что-то типа того:
case Round(x) of 56 : WriteLn('x = 56'); end;Однако я проверил. Программа компилируется и работает нормально. И всё же я не советую использовать в ваших программах конструкции, которые противоречат документации. Если необходимо использовать результат функции Round в подобных ситуациях, то лучше сначала присвоить результат какой-нибудь переменной порядкового типа, а потом уже эту переменную использовать с таким операторами, как case.
Вступить в группу "Основы программирования"
Подписаться на канал в РУТУБ Подписаться на Дзен-канал Подписаться на рассылки по программированию |
Как стать программистом 2.0
Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее... |
Помощь в технических вопросах
Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее... |