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

MR_smoker

Арбитр
АРБИТРАЖ
ПРОВЕРЕННЫЙ ПРОДАВЕЦ
ЮБИЛЕЙНАЯ ЛЕНТА

MR_smoker

Арбитр
АРБИТРАЖ
ПРОВЕРЕННЫЙ ПРОДАВЕЦ
ЮБИЛЕЙНАЯ ЛЕНТА
Регистрация
20 Июн 2018
Сообщения
1,734
Реакции
632
Репутация
39
Род занятий

Отрисовка документов

Округление чисел в построении программ очень важный механизм. Он позволяет управлять точностью получаемых вычислений, а так же влиять на ход выполнения алгоритма в процессе работы программы.
В программировании можно выделить несколько возможных вариантов округления – округление до целого или до заданной точности знаков после запятой. Так же оно различается по механизму округления – до ближайшего целого, в сторону большего целого или наименьшего целого значения. Для всех этих задач в 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.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) позволяет отбросить целое число, оставив только дробную часть:
A := Frac(1235.1219); // A = 0.1219
 
Сверху