Округление чисел в построении программ очень важный механизм. Он позволяет управлять точностью получаемых вычислений, а так же влиять на ход выполнения алгоритма в процессе работы программы.
В программировании можно выделить несколько возможных вариантов округления – округление до целого или до заданной точности знаков после запятой. Так же оно различается по механизму округления – до ближайшего целого, в сторону большего целого или наименьшего целого значения. Для всех этих задач в 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) позволяет отбросить целое число, оставив только дробную часть:
Автор: Lonely Wanderer |
Чем отличается законченный программист от простого пользователя? Пользователь думает, что в килобайте 1000 байт, а Программист думает, что в километре 1024 метра. |
Еще более короткий способ:
Округление дробных чисел с точностью i — количество знаков после запятой, S — дробное число в строковом виде.
var i,r,f:real;
begin
i:=StrToFloat(form4.Edit11.Text);
r:=StrToFloat(form4.Edit6.Text);
f:=(i/r/10);
form4.label2.Caption:=’#1 ответ =’+FloatToStr(f)+’%’;
люди подскажите пожалуйста как округлить f до сотых (два знака после запятой).
насчет if..then..else в Delphi
как после else написать выполнение нескольких условий?
пробовал через and — не получается, пишет «что я дурак» ))) подскажите пожалуйста.. .
мне в частности нужно, чтобы после выполнения условия первая форма скрывалась, а вторая открывалась.. .
if (form3.Edit1.Text=») then showmessage(‘Введите все поля! ‘) else form2.show __________________;