СтатьиПрограммирование в Delphi

Округление чисел в Delphi

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

В программировании можно выделить несколько возможных вариантов округления – округление до целого или до заданной точности знаков после запятой. Так же оно различается по механизму округления – до ближайшего целого, в сторону большего целого или наименьшего целого значения. Для всех этих задач в Delphi используется набор математических функций, доступных после добавления в разделе описания соответствующей библиотеки:

uses
Math;

Округление числа до целого значения

Для округления до целого числа используется следующий набор функций:

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.15); // 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) позволяет отбросить целое число, оставив только дробную часть:

A := Frac(1235.1219); // A = 0.1219


Комментарии

Имя:
Текст комментария:
* В комментариях запрещено публиковать рекламные объявления. Сообщения, содержащие ссылки на сторонние ресурсы добавляется в скрытом режиме. Они будут открыты, если не нарушают установленных правил, после проверки.
Защита от спам-роботов (* Обязателельно укажите ответ на простой вопрос ниже.)
Под каким номером в алфавите буква «Б»? (цифра)