Округление в меньшую сторону паскаль
Уроки Паскаль
Для того чтобы в Паскаль можно было оперировать не только целыми числами, но и дробными существуют вещественные типы данных. Один из таких типов называется Real. В этом уроке мы рассмотрим 2 функции, которые производятся над дробными числами. Это функция Trunc, которая округляет дробное число до целого, отбрасывая дробную часть и функция Round, которая округляет дробное число до ближайшего целого.
В строке №3 и №4 мы указали сразу 2 типа переменных. Для переменных N и K мы указали тип данных Integer, т.е. эти переменные могут принимать только целые значения в диапазоне от -32768 до 32767. Для переменных A и B мы указываем тип данных Real. Это вещественный тип данных, применяемый для переменных, которые могут принимать дробные значения в диапазоне от 2.9*10 -39 до 1.7*10 38 . Обратите внимание, что переменные разных типов указываются в разделе описания переменных через точку с запятой.
В строке №7 присваиваем переменной «N» значение «4».
В строке №8 присваиваем переменной «A» значение 3,6. Учтите, что при записи дробного числа в программе между целой и дробной частью ставится точка (а не запятая как при обычной записи).
Строка №9. Здесь переменной вещественного типа B мы присваиваем значение переменной целого типа N. Фактически мы присвоили переменной «B» значение 4. Таким образом, получается, что в переменную типа Real можно записать значение переменной Integer (т.е. целое число). А вот записать вещественное число в переменную Integer нельзя. Если нам необходимо это сделать, то мы должны определить, что делать с дробной частью. И здесь есть 2 варианта.
Строка №11. Функция trunk говорит нам о том, что при записи вещественного числа A в переменную целого типа K, дробная часть будет отбрасываться. Таким образом, получится, что переменной N будет присвоено значение не «3.6» , а просто «3».
Строка №13. Функция Round говорит нам о том, что при записи вещественного числа A в переменную целого типа K , число будет округляться до ближайшего целого. Таким образом, получится, что переменной K будет присвоено значение не «3.6» , а «4».
Обратите внимание, на формат вывода на экран вещественных чисел. Паскаль выводит дробные числа на экран в виде числа с плавающей точкой (экспоненциальная форма). Эта запись является неудобной, поэтому для приведения ее к нормальному виду прибегают к форматированию. Для форматирования нужно в строке №10 (вывод на экран) сделать такие изменения: writeln(‘B=’,B:2:1). После переменной B мы через двоеточие записываем 2 числа. Первое число (в нашем случае «2») показывает, сколько всего знаков должно выводиться на экран, второе число («1») показывает количество знаков после запятой.
После внесения этих изменений в программу мы получим следующий результат:
Дополнение к материалу.
Ниже приведена таблица значений для различных вещественных типов данных.
Округление чисел
При выполнении различных арифметических операций важно, чтобы результат округлялся правильно. Часто требуется округлять в большую, меньшую сторону, до ближайшего целого или округлить до сотых.
Для этого программист может использовать различные инструменты, такие как встроенная функция 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().
Чтобы с помощью функции 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.
Pascal округление до целого
Функция Round в Паскале округляет значение с плавающей точкой до ближайшего целого числа. Синтаксис:
function Round(X: ValReal) : Int64;
Функция Round округляет Х до ближайшего целого числа и возвращает значение, которое может быть как меньше, так и больше исходного значения вещественного числа Х.
О типе ValReal я рассказывал здесь.
Правило округления числа
Округление вещественного числа Х выполняется по следующему правилу:
- Если дробная часть числа Х меньше 0.5, то число Х округляется в меньшую сторону.
- Если дробная часть числа Х больше 0.5, то число Х округляется в большую сторону.
- Если дробная часть числа Х равна 0.5, то используется особый принцип округления числа, так называемое “Банковское округление”. То есть когда число округляется всегда в сторону чётного числа.
Примеры округления чисел
Исходя из вышесказанного функция Round будет возвращать следующие результаты при округлении чисел:
Ну и напоследок пример программы:
Обратите внимание в примере на закомментированную строку. Так делать нельзя, потому что в Паскале не допускается присваивать целочисленным переменным вещественные значения.
Поэтому, если необходимо сложить две переменных – целую и вещественную, а результат поместить в целую, то надо использовать какую-либо из подпрограмм преобразования типов. Например, функцию Round.
Также обратите внимание, что функция Round возвращает число типа Int64. Этот тип НЕ является порядковым типом данных. Это значит, что по идее функцию Round нельзя использовать в конструкциях, требующих применения порядковых типов. Например, с оператором case.
То есть по идее компилятор должен выдать ошибку, если в вашей программе будет что-то типа того: Однако я проверил. Программа компилируется и работает нормально. И всё же я не советую использовать в ваших программах конструкции, которые противоречат документации. Если необходимо использовать результат функции Round в подобных ситуациях, то лучше сначала присвоить результат какой-нибудь переменной порядкового типа, а потом уже эту переменную использовать с таким операторами, как case.
Модуль System, входящий в состав RTL, содержит функцию Round, которая округляет значение типа real до значения типа integer. Её входным параметром является выражение вещественного типа, и Round возвращает значение типа longint, округленное до ближайшего целого числа. Если входное значение находится точно посередине между двух целых чисел – N.5 – то используется «банковское округление», в результате которого значение округляется до ближайшего четного числа.
Int Целая часть числа с плавающей точкой
Round Округление чисел с плавающей запятой до целого числа
Объявление: Function Round(X: Real): Longint;
Режим: Windows, Real, Protected
X – выражение с реальным типом. Round возвращает значение типа Longint, которое является значением X, округленного к самому близкому целому числу. Если X – ровно посередине между двумя целыми числами, то результатом будет число с самой большой абсолютной величиной.
Если округленное значение X ненаходится внутри допустимого диапазона Longint, то происходит ошибка во время выполнения программы.
Пример функции Round
writeln(‘chislo a ravno’,a:2);
:2 это до какого символа после запятой выводить число (то есть оно округляется)
пусть а=3,3333333
тогда а: 4 равно 3,3333
минимальное значение при округлении равно 2.
Округление числа в Excel
Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).
Допустим, вы хотите округлить число до ближайшего целого числа, так как десятичные значения несущественны. Вы также можете округлить число до кратных 10, чтобы упростить приблизительную величину. Есть несколько способов округлить число.
Изменение количества знаков после запятой без изменения значения
На листе
Выделите ячейки, формат которых требуется изменить.
Чтобы после запятой отображалось больше или меньше знаков, на вкладке Главная в группе Число нажмите кнопку Увеличить разрядность или Уменьшить разрядность
.
Во встроенном числовом формате
На вкладке Главная в группе Число щелкните стрелку рядом со списком числовых форматов и выберите пункт Другие числовые форматы.
В списке Категория выберите значение Денежный, Финансовый, Процентный или Экспоненциальный в зависимости от типа данных.
В поле Число десятичных знаков введите требуемое число знаков после запятой.
Округление числа вверх
Используйте функцию ОКРУГЛВВЕРХ. В некоторых случаях может потребоваться использовать функции ЧЁТН и НЕЧЁТ для округления вверх до ближайшего четного или нечетного числа.
Округление числа вниз
Округление числа до ближайшего значения
Округление числа до ближайшего дробного значения
Округление числа до указанного количества значимых разрядов
Значимые разряды — это разряды, которые влияют на точность числа.
В примерах этого раздела используются функции ОКРУГЛ, ОКРУГЛВВЕРХ и ОКРУГЛВНИЗ. Они показывают способы округления положительных, отрицательных, целых и дробных чисел, но приведенные примеры охватывают лишь небольшую часть возможных ситуаций.
В приведенном ниже списке содержатся общие правила, которые необходимо учитывать при округлении чисел до указанного количества значимых разрядов. Вы можете поэкспериментировать с функциями округления и подставить собственные числа и параметры, чтобы получить число с нужным количеством значимых разрядов.
Округляемые отрицательные числа прежде всего преобразуются в абсолютные значения (значения без знака «минус»). После округления знак «минус» применяется повторно. Хотя это может показаться нелогичным, именно так выполняется округление. Например, при использовании функции ОКРУГЛВНИЗ для округления числа -889 до двух значимых разрядов результатом является число -880. Сначала -889 преобразуется в абсолютное значение (889). Затем это значение округляется до двух значимых разрядов (880). После этого повторно применяется знак «минус», что дает в результате -880.
При применении к положительному числу функции ОКРУГЛВНИЗ оно всегда округляется вниз, а при применении функции ОКРУГЛВВЕРХ — вверх.
Функция ОКРУГЛ округляет дробные числа следующим образом: если дробная часть больше или равна 0,5, число округляется вверх. Если дробная часть меньше 0,5, число округляется вниз.
Функция ОКРУГЛ округляет целые числа вверх или вниз аналогичным образом, при этом вместо делителя 0,5 используется 5.
В общем при округлении числа без дробной части (целого числа) необходимо вычесть длину числа из нужного количества значимых разрядов. Например, чтобы округлить 2345678 вниз до 3 значимых разрядов, используется функция ОКРУГЛВНИЗ с параметром -4: = ОКРУГЛВНИЗ(2345678,-4). При этом число округляется до значения 2340000, где часть «234» представляет собой значимые разряды.
Округление числа до заданного кратного
Иногда может потребоваться округлить значение до кратного заданному числу. Например, допустим, что компания поставляет товары в ящиках по 18 единиц. С помощью функции ОКРУГЛТ можно определить, сколько ящиков потребуется для поставки 204 единиц товара. В данном случае ответом является 12, так как число 204 при делении на 18 дает значение 11,333, которое необходимо округлить вверх. В 12-м ящике будет только 6 единиц товара.
Может также потребоваться округлить отрицательное значение до кратного отрицательному или дробное — до кратного дробному. Для этого также можно применять функцию ОКРУГЛТ.
Округление чисел в Delphi
Округление чисел в построении программ очень важный механизм. Он позволяет управлять точностью получаемых вычислений, а так же влиять на ход выполнения алгоритма в процессе работы программы.
В программировании можно выделить несколько возможных вариантов округления – округление до целого или до заданной точности знаков после запятой. Так же оно различается по механизму округления – до ближайшего целого, в сторону большего целого или наименьшего целого значения. Для всех этих задач в Delphi используется набор математических функций, доступных после добавления в разделе описания соответствующей библиотеки:
Округление числа до целого значения
Для округления до целого числа используется следующий набор функций:
Ceil(X) — до целого в большую сторону;
Floor(X) — до целого в меньшую сторону;
Round(X) — число до целого в ближайшую сторону;
Trunc(X) — число до целого путем отбарасывания дробной части.
В качестве параметра эти функции используют дробное значение X и возвращают целое. Примеры округления чисел:
// до ближайшего большего целого:
A := Ceil(15.15); // A = 16
В := Ceil(15.95); // В = 16
// до ближайшего меньшего целого:
A := Floor(15.15); // A = 15
В := Floor(15.95); // В = 15
// по математическим правилам до ближайшего целого:
A := Round(15.15); // A = 15
B := Round(15.95); // B = 16
C := Round(15.5); // C = 16
D := Round(15.4999); // D = 15
// отбрасывание дробной части
A := Trunc(15.15); // A = 15
В := Trunc(15.95); // В = 15
* Несмотря на схожесть результата, Floor и Trunc имеют некоторое отличие. Floor возвращает значение типа Integer, тогда как Trunc — Int64, имеющий больший диапазон значений. Ceil так же возвращает значение Integer. Round возвращает Int64.
Округление до заданной точности знаков после запятой
Наиболее удобной функцией для этих вычислений является SimpleRoundTo. В качестве параметров ей нужно указать дробное число, а вторым параметром отрицательным целым числом. Второй параметр указывает на количество необходимых знаков после запятой.
A := SimpleRoundTo(15.1219, -1); // A = 15.1
B := SimpleRoundTo(15.1219, -2); // B = 15.12
C := SimpleRoundTo(15.1219, -3); // C = 15.122
D := SimpleRoundTo(15.1219, -4); // D = 15.1219
E := SimpleRoundTo(15.1219, -5); // E = 15.1219
Следует обратить внимание, что округление происходит по математическим правилам к ближайшему значению. Кроме того, если задать точность большую, чем в исходном значении, нули функция не подставит.
Другие механизмы округления чисел
Используя ту же функцию SimpleRoundTo можно так же выполнить округление до целого, указав вторым параметром ноль:
A := SimpleRoundTo(15.1219, 0); // A = 15
Если указывать положительные значения, то задается округление до нужной разрядности числа:
A := SimpleRoundTo(1235.1219, 1); // A = 1240 – до десятков
B := SimpleRoundTo(1235.1219, 2); // B = 1200 – до сотен
C := SimpleRoundTo(1235.1219, 3); // C = 1000 – до тысяч
Функция Frac(x) позволяет отбросить целое число, оставив только дробную часть: