Space Base Space Base
+7 928 008-80-89
ru
  • en
  • es
  • Главная
  • Услуги
  • Портфолио
  • Библиотека
  • Контакты
  • Главная
  • Услуги
  • Портфолио
  • Библиотека
  • Контакты
  1. Библиотека
  2. Delphi
  3. Округление чисел в Delphi
logo

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

17.01.2017

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

В программировании можно выделить несколько возможных вариантов округления – округление до целого или до заданной точности знаков после запятой. Так же оно различается по механизму округления – до ближайшего целого, в сторону большего целого или наименьшего целого значения. Для всех этих задач в 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

Другие материалы:

Копирование, перемещение и переименование папки в Delphi


Функция MoveFile в Delphi, описание и примеры


Создание и работа с текстовыми файлами в Delphi


Написать комментарий

Комментарии

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


коммент.

avatar

Alex

- 25 февраля 2024, 01:08 ↓
Это никакая не «пасхалочка». Это т.н. «банковское» округление.
Возьмём для примера числа от 2 до 3. Тогда математическое округление выглядит так: числа 2.1, 2.2, 2.3, 2.4 округляются до 2. Итого этих чисел 4. Ну а числа от 2.5 до 2.9 округляются до 3. Этих чисел 5. 4 числа округляются в меньшую сторону, 5 чисел — в большую. При расчёте денежных сумм это даёт погрешность. Вот чтобы снизить такую погрешность и уравнять количество округлений в большую и меньшую сторону и придумали «банковское» округление.
Суть его в том что округление «центральных» чисел происходит в сторону ближайшего чётного. Так для 15.5 ближайшее чётное будет 16, а для 14.5 — 14. Вот и вся логика.
avatar

andrealina

- 17 января 2024, 09:33 ↓
Andy, это одна из «пасхалочек» delphi. Такая проблема возникает с float или currency(если память не изменяет), но если установить extended — округление срабатывает более точно.
avatar

васьок

- 13 января 2024, 13:16 ↓
Round(15.4999); // D = 15?
вряд ли
avatar

Антон Сенников

- 09 февраля 2023, 10:38 ↓
Энди, к сожалению не могу проверить и что-то разумное подсказать — давно не работаю в этой среде разработки, даже нет самой Delphi. Возможно, какая-то особенность реализации.
avatar

Andy

- 02 февраля 2023, 08:32 ↓
Приветствую.
А почему Round(15.5) это 16 //округляет вверх
В то же время Round(14.5) это 14 //округлит вниз, хотя дробная часть одинакова

Разработка сайтов

Корпоративный сайт
Интернет-магазин
Лендинг - одностраничный сайт
Сайт-визитка
Сайт-портфолио

Проектирование

Прототип, UX-дизайн

Дизайн

UI-дизайн
Логотип

+54 911 2801-4950

info@space-base.net
+7 928 008-80-89

Web-сайты для успешного бизнеса

Web-сайты для успешного бизнеса

Главная Услуги Портфолио События Библиотека Контакты
+7 928 008-80-89 Меню
Политика в отношении обработки персональных данных © Copyright 2014 - | Space-Base

Лучшее время начать свой проект - Сейчас!

Выбраны опции:

Отправить сообщение на:

Telegram WhatsApp

Отправляя сообщение, вы даете свое согласие на
обработку песональных данных