Pascal округление в меньшую сторону

Функция Round в Паскале округляет значение с плавающей точкой до ближайшего целого числа. Синтаксис:

function Round(X: ValReal) : Int64;

Функция Round округляет Х до ближайшего целого числа и возвращает значение, которое может быть как меньше, так и больше исходного значения вещественного числа Х.

О типе ValReal я рассказывал здесь.

Правило округления числа

Округление вещественного числа Х выполняется по следующему правилу:

  1. Если дробная часть числа Х меньше 0.5, то число Х округляется в меньшую сторону.
  2. Если дробная часть числа Х больше 0.5, то число Х округляется в большую сторону.
  3. Если дробная часть числа Х равна 0.5, то используется особый принцип округления числа, так называемое “Банковское округление”. То есть когда число округляется всегда в сторону чётного числа.

Примеры округления чисел

Исходя из вышесказанного функция Round будет возвращать следующие результаты при округлении чисел:

Ну и напоследок пример программы:

Обратите внимание в примере на закомментированную строку. Так делать нельзя, потому что в Паскале не допускается присваивать целочисленным переменным вещественные значения.

Поэтому, если необходимо сложить две переменных — целую и вещественную, а результат поместить в целую, то надо использовать какую-либо из подпрограмм преобразования типов. Например, функцию Round.

Также обратите внимание, что функция Round возвращает число типа Int64. Этот тип НЕ является порядковым типом данных. Это значит, что по идее функцию Round нельзя использовать в конструкциях, требующих применения порядковых типов. Например, с оператором case.

То есть по идее компилятор должен выдать ошибку, если в вашей программе будет что-то типа того: Однако я проверил. Программа компилируется и работает нормально. И всё же я не советую использовать в ваших программах конструкции, которые противоречат документации. Если необходимо использовать результат функции Round в подобных ситуациях, то лучше сначала присвоить результат какой-нибудь переменной порядкового типа, а потом уже эту переменную использовать с таким операторами, как case.

Читайте также:  Где поймать мьюту в покемон го

При выполнении различных арифметических операций важно, чтобы результат округлялся правильно. Часто требуется округлять в большую, меньшую сторону, до ближайшего целого или округлить до сотых.

Для этого программист может использовать различные инструменты, такие как встроенная функция round(), преобразование к типу int и функции из подключаемого модуля math.

Способы округления чисел

Для округления чисел придумано много способов, они не лишены недостатков, однако часто используются для решения задач. Разберёмся в тонкостях каждого из них.

Если используется стандартная библиотека math, то в начале кода её необходимо подключить. Сделать это можно, например, с помощью инструкции: import math .

math.ceil() – округление чисел в большую сторону

Функция получила своё имя от термина «ceiling», который используется в математике для описания числа, которое больше или равно заданному.

Любая дробь находится в целочисленном интервале, например, 1.2 лежит между 1 и 2. Функция ceil() определяет, какая из границ интервала наибольшая и записывает её в результат округления.

math.floor() – округление чисел в меньшую сторону

Функция округляет дробное число до ближайшего целого, которое меньше или равно исходному. Работает аналогично функции ceil() , но с округлением в противоположную сторону.

math.trunc() – отбрасывание дробной части

Возвращает целое число, не учитывая его дробную часть. То есть никакого округления не происходит, Python просто забывает о дробной части, приводя число к целочисленному виду.

Избавиться от дробной части можно с помощью обычного преобразования числа к типу int. Такой способ полностью эквивалентен использованию trunc() .

Нормальное округление

Python позволяет реализовать нормальное арифметическое округление, использовав функцию преобразования к типу int.

И хотя int() работает по другому алгоритму, результат её использования для положительных чисел полностью аналогичен выводу функции floor(), которая округляет числа «вниз». Для отрицательных аналогичен функции ceil().

Читайте также:  Did not successfully update the mbr continuing

Чтобы с помощью функции int() округлить число по математическим правилам, необходимо добавить к нему 0.5, если оно положительное, и -0.5, если оно отрицательное.

Тогда операция принимает такой вид: int(num + (0.5 if num > 0 else -0.5)). Чтобы каждый раз не писать условие, удобно сделать отдельную функцию:

Функция работает также, как стандартная функция округление во второй версии Python (арифметическое округление).

round() – округление чисел

round() – стандартная функция округления в языке Python. Она не всегда работает так, как ожидается, а её алгоритм различается в разных версиях Python.

В Python 2

Во второй версии Python используется арифметическое округление. Оно обладает постоянно растущей погрешностью, что приводит к появлению неточностей и ошибок.

Увеличение погрешности вызвано неравным количеством цифр, определяющих, в какую сторону округлять. Всего 4 цифры на конце приводят к округлению «вниз», и 5 цифр к округлению «вверх».

Помимо этого, могут быть неточности, например, если округлить число 2.675 до второго знака, получится число 2.67 вместо 2.68. Это происходит из-за невозможности точно представить десятичные числа типа «float» в двоичном коде.

В Python 3

В третьей версии Python используется банковское округление. Это значит, что округление происходит до самого близкого чётного.

Такой подход не избавляет от ошибок полностью, но уменьшает шанс их возникновения и позволяет программисту добиться большей точности при вычислениях.

Но если вам по каким то причинам нужно округление как в Python 2, то можно воспользоваться функцией написанной нами выше на основе приведения к целому числу.

Округление до сотых

У функции raund() есть ещё один аргумент. Он показывает до какого количества знаков после запятой следует округлять. Таким образом, если нам надо в Python округлить до сотых, этому параметру следует задать значение 2.

Читайте также:  Excel не удается подключиться к принтеру

Пример округления до нужного знака:

Ошибки округления и модуль decimal

При округлении функцией round(), можно получить следующее:

Почему в одном случае округляется вниз, а в другом вверх? При переводе 2.85 в двоичную систему получается число, которое немного больше. Поэтому функция видит не «5», а «>5» и округляет вверх.

Проблему неточного представления чисел отлично иллюстрирует пример:

Из-за подобных ошибок числа типа «float» нельзя использовать там, где изменения значения на одну тысячную может привести к неверному результату. Решить данную проблему поможет модуль decimal.

Функция Round Pascal-Паскаль

  • Скачено бесплатно: 9248
  • Куплено: 414
  • Pascal-Паскаль->R->Функция Round Pascal-Паскаль

Описание

Round: Округляет значение вещественного типа до значения целочисленного типа.

Объявление: Function Round(X: Real): Longint;
Режим: Windows, Real, Protected

Замечания:

X — выражение с реальным типом. Round возвращает значение типа Longint, которое является значением X, округленного к самому близкому целому числу. Если X — ровно посередине между двумя целыми числами, то результатом будет число с самой большой абсолютной величиной.

Если округленное значение X ненаходится внутри допустимого диапазона Longint, то происходит ошибка во время выполнения программы.

Пример функции Round

  • Int
  • Trunc

Программирование

Исходники Pascal (127)

Справочник

Справочник по паскалю: директивы, функции, процедуры, операторы и модули по алфавиту

Ссылка на основную публикацию
Libreoffice как разбить ячейку
Горизонтальное или вертикальное разделение ячейки или группы ячеек на введенное количество ячеек. When in Writer: Выберите Таблица - Разделить ячейки...
Deletefile сбой код 5 как исправить
Иногда при установке программ либо приложений на экране компьютера появляется сообщение, о том, что возникла ошибка 5 Windows 10. Это...
Deskscapes 8 как поставить свою анимацию
Мичиганская команда после бета-теста выпустила свежую версию своего продукта под названием DeskScapes с поддержкой Windows 8. Это обновленный инструмент для...
Microlab системный блок характеристики
Цена на системные блоки microlab Купить системные блоки microlab в России по самым доступным ценам, вы сможете воспользовавшись нашим сайтом....

Pascal округление в меньшую сторону

Функция Round в Паскале округляет значение с плавающей точкой до ближайшего целого числа. Синтаксис:

function Round(X: ValReal) : Int64;

Функция Round округляет Х до ближайшего целого числа и возвращает значение, которое может быть как меньше, так и больше исходного значения вещественного числа Х.

О типе ValReal я рассказывал здесь.

Правило округления числа

Округление вещественного числа Х выполняется по следующему правилу:

  1. Если дробная часть числа Х меньше 0.5, то число Х округляется в меньшую сторону.
  2. Если дробная часть числа Х больше 0.5, то число Х округляется в большую сторону.
  3. Если дробная часть числа Х равна 0.5, то используется особый принцип округления числа, так называемое “Банковское округление”. То есть когда число округляется всегда в сторону чётного числа.

Примеры округления чисел

Исходя из вышесказанного функция Round будет возвращать следующие результаты при округлении чисел:

Ну и напоследок пример программы:

Обратите внимание в примере на закомментированную строку. Так делать нельзя, потому что в Паскале не допускается присваивать целочисленным переменным вещественные значения.

Поэтому, если необходимо сложить две переменных — целую и вещественную, а результат поместить в целую, то надо использовать какую-либо из подпрограмм преобразования типов. Например, функцию Round.

Также обратите внимание, что функция Round возвращает число типа Int64. Этот тип НЕ является порядковым типом данных. Это значит, что по идее функцию Round нельзя использовать в конструкциях, требующих применения порядковых типов. Например, с оператором case.

То есть по идее компилятор должен выдать ошибку, если в вашей программе будет что-то типа того: Однако я проверил. Программа компилируется и работает нормально. И всё же я не советую использовать в ваших программах конструкции, которые противоречат документации. Если необходимо использовать результат функции Round в подобных ситуациях, то лучше сначала присвоить результат какой-нибудь переменной порядкового типа, а потом уже эту переменную использовать с таким операторами, как case.

Читайте также:  Msi n1996 какой сокет

При выполнении различных арифметических операций важно, чтобы результат округлялся правильно. Часто требуется округлять в большую, меньшую сторону, до ближайшего целого или округлить до сотых.

Для этого программист может использовать различные инструменты, такие как встроенная функция round(), преобразование к типу int и функции из подключаемого модуля math.

Способы округления чисел

Для округления чисел придумано много способов, они не лишены недостатков, однако часто используются для решения задач. Разберёмся в тонкостях каждого из них.

Если используется стандартная библиотека math, то в начале кода её необходимо подключить. Сделать это можно, например, с помощью инструкции: import math .

math.ceil() – округление чисел в большую сторону

Функция получила своё имя от термина «ceiling», который используется в математике для описания числа, которое больше или равно заданному.

Любая дробь находится в целочисленном интервале, например, 1.2 лежит между 1 и 2. Функция ceil() определяет, какая из границ интервала наибольшая и записывает её в результат округления.

math.floor() – округление чисел в меньшую сторону

Функция округляет дробное число до ближайшего целого, которое меньше или равно исходному. Работает аналогично функции ceil() , но с округлением в противоположную сторону.

math.trunc() – отбрасывание дробной части

Возвращает целое число, не учитывая его дробную часть. То есть никакого округления не происходит, Python просто забывает о дробной части, приводя число к целочисленному виду.

Избавиться от дробной части можно с помощью обычного преобразования числа к типу int. Такой способ полностью эквивалентен использованию trunc() .

Нормальное округление

Python позволяет реализовать нормальное арифметическое округление, использовав функцию преобразования к типу int.

И хотя int() работает по другому алгоритму, результат её использования для положительных чисел полностью аналогичен выводу функции floor(), которая округляет числа «вниз». Для отрицательных аналогичен функции ceil().

Читайте также:  Far cry 4 как убрать черные полосы

Чтобы с помощью функции int() округлить число по математическим правилам, необходимо добавить к нему 0.5, если оно положительное, и -0.5, если оно отрицательное.

Тогда операция принимает такой вид: int(num + (0.5 if num > 0 else -0.5)). Чтобы каждый раз не писать условие, удобно сделать отдельную функцию:

Функция работает также, как стандартная функция округление во второй версии Python (арифметическое округление).

round() – округление чисел

round() – стандартная функция округления в языке Python. Она не всегда работает так, как ожидается, а её алгоритм различается в разных версиях Python.

В Python 2

Во второй версии Python используется арифметическое округление. Оно обладает постоянно растущей погрешностью, что приводит к появлению неточностей и ошибок.

Увеличение погрешности вызвано неравным количеством цифр, определяющих, в какую сторону округлять. Всего 4 цифры на конце приводят к округлению «вниз», и 5 цифр к округлению «вверх».

Помимо этого, могут быть неточности, например, если округлить число 2.675 до второго знака, получится число 2.67 вместо 2.68. Это происходит из-за невозможности точно представить десятичные числа типа «float» в двоичном коде.

В Python 3

В третьей версии Python используется банковское округление. Это значит, что округление происходит до самого близкого чётного.

Такой подход не избавляет от ошибок полностью, но уменьшает шанс их возникновения и позволяет программисту добиться большей точности при вычислениях.

Но если вам по каким то причинам нужно округление как в Python 2, то можно воспользоваться функцией написанной нами выше на основе приведения к целому числу.

Округление до сотых

У функции raund() есть ещё один аргумент. Он показывает до какого количества знаков после запятой следует округлять. Таким образом, если нам надо в Python округлить до сотых, этому параметру следует задать значение 2.

Читайте также:  Как отключить звук мышки на компе

Пример округления до нужного знака:

Ошибки округления и модуль decimal

При округлении функцией round(), можно получить следующее:

Почему в одном случае округляется вниз, а в другом вверх? При переводе 2.85 в двоичную систему получается число, которое немного больше. Поэтому функция видит не «5», а «>5» и округляет вверх.

Проблему неточного представления чисел отлично иллюстрирует пример:

Из-за подобных ошибок числа типа «float» нельзя использовать там, где изменения значения на одну тысячную может привести к неверному результату. Решить данную проблему поможет модуль decimal.

Функция Round Pascal-Паскаль

  • Скачено бесплатно: 9248
  • Куплено: 414
  • Pascal-Паскаль->R->Функция Round Pascal-Паскаль

Описание

Round: Округляет значение вещественного типа до значения целочисленного типа.

Объявление: Function Round(X: Real): Longint;
Режим: Windows, Real, Protected

Замечания:

X — выражение с реальным типом. Round возвращает значение типа Longint, которое является значением X, округленного к самому близкому целому числу. Если X — ровно посередине между двумя целыми числами, то результатом будет число с самой большой абсолютной величиной.

Если округленное значение X ненаходится внутри допустимого диапазона Longint, то происходит ошибка во время выполнения программы.

Пример функции Round

  • Int
  • Trunc

Программирование

Исходники Pascal (127)

Справочник

Справочник по паскалю: директивы, функции, процедуры, операторы и модули по алфавиту

Ссылка на основную публикацию
Libreoffice как разбить ячейку
Горизонтальное или вертикальное разделение ячейки или группы ячеек на введенное количество ячеек. When in Writer: Выберите Таблица - Разделить ячейки...
Deletefile сбой код 5 как исправить
Иногда при установке программ либо приложений на экране компьютера появляется сообщение, о том, что возникла ошибка 5 Windows 10. Это...
Deskscapes 8 как поставить свою анимацию
Мичиганская команда после бета-теста выпустила свежую версию своего продукта под названием DeskScapes с поддержкой Windows 8. Это обновленный инструмент для...
Microlab системный блок характеристики
Цена на системные блоки microlab Купить системные блоки microlab в России по самым доступным ценам, вы сможете воспользовавшись нашим сайтом....
Adblock detector