Letysite.ru

IT Новости с интернет пространства
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Access округление числа

Как округлить в MS Access, VBA

каков наилучший способ округления в доступе VBA?

мой текущий метод использует метод Excel

но я ищу средство, которое не полагается на Excel.

12 ответов

будьте осторожны, функция VBA Round использует округление банкира, где она округляется .5 до четного числа, например:

в то время как функция листа Excel круглый, всегда округляет .5 вверх.

Я сделал несколько тестов, и похоже .5 округление вверх (симметричное округление) также используется при форматировании ячеек, а также для округления ширины столбца (при использовании общего формата чисел). Флаг «точность как показано», похоже, не делает никакого округления, он просто использует округленный результат формата ячейки.

Я попытался реализовать функцию SymArith от Microsoft в VBA для моего округления, но обнаружил, что исправление имеет ошибку, когда вы пытаетесь дать ему число, подобное 58.55; функция дает результат 58.5 вместо 58.6. Затем я, наконец, обнаружил, что вы можете использовать круглую функцию листа Excel, например:

приложение.Круглый(58.55, 1)

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

чтобы немного расширить принятый ответ:

» функция Round выполняет округление до четного, которое отличается от круглого до большего.»
—Microsoft

формат всегда округляется.

ACC2000: ошибки округления при использовании чисел с плавающей запятой:http://support.microsoft.com/kb/210423

ACC2000: как округлить число вверх или вниз желаемым шагом: http://support.microsoft.com/kb/209996

Как Реализовать Пользовательские Процедуры Округления:http://support.microsoft.com/kb/196652

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

в настоящее время я использую функцию

который, кажется, работает хорошо

Int и Fix являются полезными функциями округления, которые дают вам целочисленную часть числа.

Int всегда округляет — Int (3.5) = 3, Int(-3.5) = -4

Fix всегда округляет до нуля-Fix (3.5) = 3, Fix(-3.5) = -3

есть также функции принуждения, в частности CInt и CLng, которые пытаются принудить число к целочисленному типу или длинному типу (целые числа находятся между -32,768 и 32,767, длинные-между-2,147,483,648 и 2,147,483,647). Они оба будут округляться к ближайшему целому числу, округляясь от нуля от .5-CInt (3.5) = 4, Cint(3.49) = 3, CInt(-3.5) = -4 и т. д.

и так далее.Вы часто обнаружите, что, по-видимому, такие решения kludgy намного быстрее, чем использование функций Excel, потому что VBA, похоже, работает в другом пространстве памяти.

например If A > B Then MaxAB = A Else MaxAB = B примерно на 40 x быстрее, чем с помощью ExcelWorksheetFunction.Макс!—3—>

к сожалению, собственные функции VBA, которые могут выполнять округление, либо отсутствуют, ограничены, неточны или ошибочны, и каждый обращается только к одному методу округления. Плюс в том, что они быстрые, и это может быть важно в некоторых ситуациях.

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

полный набор функций — для всех распространенных методов округления, всех типов данных VBA, для любого значения и не возвращающих неожиданных значений-можно найти здесь:

код только в GitHub:

они охватывают обычные методы округления:

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

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

раунд на 4/5, либо от нуля или до четного (округление банкира)

округлить до числа значимых цифры

первые три функции принимают все числовые типы данных, в то время как последний существует в трех разновидностях — для валюты, десятичной и двойной соответственно.

все они принимают заданное количество десятичных знаков, включая отрицательное число, которое округляется до десятков, сотен и т. д. Те, у кого Variant как тип возврата, вернут Null для непонятного ввода

модуль теста Для теста и проверки включен как что ж.

пример здесь-для общего округления 4/5. Пожалуйста, изучите комментарии в строке для тонких деталей и пути CDEC и используется, чтобы избежать ошибок.

Если вы говорите о округлении до целочисленного значения (а не округлении до n десятичные знаки), всегда есть старый школьный способ:

(вы можете сделать эту работу за n десятичные знаки тоже, но он начинает получать немного грязно)

Ланс уже упоминал наследование округления bug в реализации VBA. Поэтому мне нужна реальная функция округления в приложении VB6. Вот один, который я использую. Он основан на одном, который я нашел в интернете, как указано в комментариях.

Округление в Аксессе

Для округления чисел в Access 2000 и более поздних версих есть встроенная функция Round().
Для более ранних версий используйте вот эту пользовательскую функцию округления Кена Гетца.

Встроенная функция

Используйте функцию Round() в источнике данных текстового поля или в вычисляемом поле запроса.

Скажем, у вас есть такое выражение в строке «Поле» в конструкторе запросов:
Налог: [Стоимость] * [СтавкаНалога]
Чтобы округлить до ближайшей копейки, используйте:
Налог: Round([Стоимость] * [СтавкаНалога], 2)

Округление вниз

Чтобы округлить все дробные цифры до ближайшего целого вниз, используйте Int():
Int([МоеПоле])

Все эти числа будут округлены вниз до 2: 2,1, 2,5, 2,8, and 2,99.

Чтобы округлить вниз до ближайшей копейки (напр. 10,2199 руб становятся 10,21 руб), умножьте на 100, округлите, и затем разделите на 100:
Int(100 * [МоеПоле]) / 100

Заметьте, что получается при округлении вниз отрицательных величин: Int(-2.1) дает -3, так как это и есть целое число снизу. Чтобы округлять по направлению к нулю, используйте Fix() вместо Int():
Fix(100 * [МоеПоле]) / 100

Округление вверх

Чтобы округлить вверх к ближайшему большему целому, воспользуйтесь способом, которым Int() округляет отрицательные числа:
— Int( — [МоеПоле])

Как показано выше, Int(-2.1) округляет вниз до -3. Поэтому такое выражение округляет 2,1 до to 3.

Чтобы округлить вверх до ближайшей копейки, умножьте на -100, округлите, и разделите на -100:
Int(-100 * [МоеПоле]) / -100

Округлить до ближайших 5 копеек

Чтобы округлить до ближайших 5 копеек, умножьте число на 20, округлите его, и разделите на 20:
Round(20 * [МоеПоле], 0) / 20

Подобным образом, чтобы округлить до ближайшего четвертака, умножьте на 4, округлите, и разделите на 4:
Round(4 * [МоеПоле], 0) / 4

Округлить до 1000 руб.

Функция Round() в Excel принимает отрицательные числа в качестве количества мест от запятой, напр. Round(123456, -3) округляет до 1000. К сожалению, аксессовская функция этого не поддерживает.

Чтобы округлить до ближайших 1000 руб., разделите на 1000, округлите, и умножьте на 1000. Пример:
1000 * Round([Стоимость] / 1000, 0)

Чтобы округлить до 1000 руб. вниз, разделите на 1000, получите целое число и умножьте на 1000. Пример:
1000 * Int([Стоимость] / 1000)

Чтобы округлить до верхней 1000 руб., разделите на 1000 и умножьте на -1 перед получением целой величины. Пример:
-1000 * Int( [Стоимость] / -1000)

Чтобы округлить в сторону нуля, используйте Fix() вместо Int().

Альтернативно, пользовательская функция Кена Гетца ведет себя в точности как упомнутая экселевская функция.

Зачем округлять?

Существует свойство Число десятичнызх знаков для полей в таблице/запросе и для текстбоксов в форме/отчете. Это свойство влияет только на то, как поле отображается, а не на то, как оно хранится. Число выглядит округленным, но при сложении ряда чисел (напр. в примечании отчета), итог может «не биться».

Читать еще:  Формы в access используются для

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

Это также относится и к денежным полям. Аксесс отображает денежные поля округленными до ближайшей копейки, но хранит их значение до сотой доли копейки (4 знака после запятой.)

Банковское округление

Функция Round() в Аксессе использует «банковское округление». Когда последней значащей цифрой оказывается 5, она округляет до ближайшего четной цифры. Так, 0,125 округляется до 0,12 (2 четно), в то время как 0,135 округляется до 0,14 (4 четно.)

Главный смысл здесь — равенство: 1,2,3, и 4 округляются вниз. 6,7,8, и 9 — вверх. 0 не требует округления. Так, если 5 все время округлять вверх, вы получите «сдвинутые» результаты — 4 цифры округляются вниз, и 5 вверх. Чтобы избежать этого, «третий лишний» (5) округляется в соответствии с предыдущей цифрой, что сглаживает неравенство.

Если вы не хотите использовать банковское округление, возьмите функцию Кена Гетца (ссылка вверху.)

Ошибки плавающей запятой

Дробные величины компьютер обычно трактует как числа с плавающей точкой. Аксессовские поля типов Двойной точности (Double) или Одинарной точности (Single) относятся к такому типу. Тип «Двойной точности» дает около 15 знаков точности, сингл — 8 знаков (подобно ручному калькулятору).

Но эти числа являются приблизительными. Точно так же, как 1/3 требует бесконечного количества знаков в десятичной системе, большинство чисел с плавающей запятой не могут быть представлены точно в двоичной системе. Википедия объясняет проблему точности, с которой вы сталкиваетесь, оперируя числами с плавающей запятой.

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

Один из способов избежать подобных проблем — использовать числа с фиксированной запятой или мастшабированные числа.Тип данных «Денежный» в Аксессе является типом с фиксированной запятой: он всегда хранит 4 десятичных знака.

Например, откройте окно Immediate Window (Ctrl+G) и введите:
? Round(CCur(.545),2), Round(CDbl(.545),2)
Денежный тип (первый) возвращает 0,54, тогда как Двойной точности — 0,55. Денежный округляет корректно (к четной цифре 4); тип с плавающей запятой (Двойной точности) некорректно. Подобным образом, если вы попробуете 8,995, Денежный корректно округлит вверх (к четной цифре 0), в то время как тип Двойной точности округлит вниз (неверно.)

Денежный тип справляется только с 4 десятичными знаками. Используйте масштабируемый тип Действительный (Decimal), если вам нужно больше знаков после запятой.

Округление дат и времени

Обратите внимание, что тип Дата/Время в Аксессе является особым видом типа с плавающей запятой, в котором дробная часть обозначает время дня. Следовательно, поля типа Дата/Время с компонентой времени также подвержены ошибкам округления.

Функция ниже округляет дату/время до указанного количества секунд. Например, чтобы округлить до ближайшего получаса (30 * 60 seconds), используйте:
=RoundTime([МоеПолеДатаВремя], 1800)

Заключение

Для более детального технического объяснения теории округления в целом, см. статью Клайва Максфилда (Clive Maxfield) An introduction to different rounding algorithms.

MS Access: Round Function

This MSAccess tutorial explains how to use the Access Round function with syntax and examples.

Description

The Microsoft Access Round function returns a number rounded to a specified number of decimal places. However, the Round function behaves a little peculiar and uses something commonly referred to as bankers rounding. So before using this function, please read the following:

The Round function utilizes round-to-even logic. If the expression that you are rounding ends with a 5, the Round function will round the expression so that the last digit is an even number.

In these cases, the last digit after rounding is always an even number. So, be sure to only use the Round function if this is your desired result.

Syntax

The syntax for the Round function in MS Access is:

Parameters or Arguments

Applies To

The Round function can be used in the following versions of Microsoft Access:

  • Access 2016, Access 2013, Access 2010, Access 2007, Access 2003, Access XP, Access 2000

Example

Let’s look at how to use the Round function in MS Access:

Example in VBA Code

The Round function can be used in VBA code in Microsoft Access.

In this example, the variable called LNumber would now contain the value of 210.7.

Example in SQL/Queries

You can also use the Round function in a query in Microsoft Access.

In this query, we have used the Round function as follows:

This query will return the UnitPrice rounded to 1 decimal place and display the results in a column called Expr1. You can replace Expr1 with a column name that is more meaningful.

The results would now be displayed in a column called RoundedValue.

Tip to Avoid Bankers Rounding:

If you want to avoid bankers rounding, you can create your own custom function as follows:

And then call the StandardRound function instead of using the Round function.

Frequently Asked Questions

Question: I read your explanation of the Round function using the round-to-even logic. However, I really need to round some values in the traditional sense (where 5 always rounds up). How can I do this?

Answer: You could always use the following logic:

If you wanted to round 12.65 to 1 decimal place in the traditional sense (where 12.65 rounded to 1 decimal place is 12.7, instead of 12.6), try adding 0.000001 to your number before applying the Round function:

By adding the 0.000001, the expression that you are rounding will end in 1, instead of 5. causing the Round function to round in the traditional way.

And the 0.000001 does not significantly affect the value of your expression so you shouldn’t introduce any calculation errors.

Округление десятичных знаков в Access

Я использую Access для заполнения некоторых учетных форм и нашел проблему, когда она добавлена .01 к моим excel листам. База данных настроена на деление числа пополам с 3 десятичными знаками. Проблема, с которой я сталкиваюсь, заключается в том, что число после деления 27.605 округляет оба числа до 27.61, что добавляет один пенни, когда два числа объединяются.

Если 3-й десятичный знак равен 5 или более, мне нужно округлить только одно число и нужно, чтобы другое число округлилось. Таким образом, когда два числа объединяются, это не добавляет ни копейки. Я знаю, что это кажется странным, как я описал, но надбавки за форм-факторы нашей компании, и это была половина надбавок дважды в таблице. В нижней части таблицы он добавляет две дополнительные (половинные) суммы вместе.

Так что я думаю

если 3-й десятичный знак равен 5 или более круглых доплат1 до ближайшей копейки и круглых доплат2 до ближайшей копейки. Есть идеи о том, как сделать эту функцию правильно?

2 Ответа

Вы можете использовать функции RoundUp и RoundDown , найденные здесь на Experts Exchange и здесь на GitHub .

Ваше использование было бы:

Обратите внимание, что родной раунд VBA довольно глючит. Смотрите тестовый модуль загрузки.

Читать еще:  Свойства полей в access

Вы не получите лучшего ответа, чем у Густава для правильных функций округления, и в случае только двух составляющих значений, тогда достаточно дополнительных функций RoundDown и RoundUp. (FYI, подобные функции часто называются пол и потолок в других языках и библиотеках программирования.)

Однако, когда критически важно, чтобы составляющие значения суммировались с исходным / ожидаемым значением, лучше всего вычислить последнее из составляющих значений по разнице ожидаемого итога и суммы всех других округленных значений. Это гарантирует правильную сумму, даже если есть неожиданные результаты от округления. Даже при использовании функции buggy VBA Round() этот метод позволил бы избежать ошибок в 1 цент для начала.

Это особенно важно для более чем двух составляющих значений, так как нет набора функций округления, которые будут правильно округлять 3 или более значений, чтобы гарантировать, что они складываются в некоторое значение. Например, недавно мне пришлось разделить общие суммы транзакций путем (повторного)расчета скидок и налогов. Хотя я знал проценты для обоих, мне нужно было вычислить каждую часть округленной до Пенни. Пенни-ошибки были приемлемы как в дисконте, так и в налоге, но они все равно должны были суммироваться после любого округления. Единственной гарантией того, что конечная стоимость сделки останется неизменной, было сначала рассчитать и округлить налог, затем рассчитать и округлить скидку, а затем, наконец, исправить ошибки Пенни, вычитая сумму частей из ожидаемой суммы.

Похожие вопросы:

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

Это их способ в sass изменить цифру, что округление происходит на, Я хотел бы остановить округление числа, как это 2.0242914979757085% к этому 2.024%. я хотел бы настроить количество десятичных.

Это не вопрос форматирования. Недавно я обнаружил, что выполнение простого деления в запросе MS Access (2010) не возвращает ожидаемое количество цифр. Даже самые простые: (3.1 + 3.1)/2 = 3.1 Но MS.

У меня есть запрос, который показывает цену на мои продукты и сравнение с предыдущими месяцами. Запрос в Access показывает цены правильно с 4 десятичными знаками, но когда я экспортирую в Excel с.

Я хочу округлить до ближайшей половины десятичных знаков (гео координаты), чтобы сделать некоторую визуализацию данных. В t-sql есть встроенная функция для округления до половины десятичных знаков.

У меня есть файл, состоящий из многих строк данных, как показано ниже. $cat out.txt 342000,0,6.768619883040936,5.834888120763486,12211.2329060592,14437.0.

value.ToString(##0.00000%;(##0.00000%);0.00000%); У меня возникли проблемы с расшифровкой, как это форматируется. Будет ли он когда-нибудь отображать значение выше этого .00001 ниже, чем правильное.

В настоящее время я запускаю процесс использования MS Access 2010 для импорта файла Excel в таблицу SQL. В этих данных есть поля, числовые поля которых рассчитываются до 4 знаков после запятой.

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

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

Порядок выполнения операций

Если о вашем выражении длинная строка вычислений, программа Access следует строгим правилам определения старшинства операций или, говоря математическим языком, учитывает,

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

1. Скобки (любые вычисления, заключенные в скобки, Access всегда выполняет первыми).

3. Возведение в степень.

4. Деление и умножение.

5. Сложение и вычитание.

Предположим, что вы хотите использовать поля QuantityInStock(количество на складе) и QuantityOnOrder(количество в заказах) для подсчета всех товаров, имеющихся в нали­чии и находящихся на пути к клиенту. Если вы не знаете правил старшинства операций, то можете сформировать следующее выражение:

TotalValue: [UnitsInStock] + [UnitsOnOrder] * [Price]

Проблема состоит в том, что программа Access перемножит поля QuantityOnOrderи Priceи добавит полученное значение к значению ноля QuantityInStock.Для устранения этой оплошности нужно применить скобки следующим образом:

TotalValue: ([UnitsInStock] + [UnitsOnOrder]) * [Price]

Теперь поля QuantitylnStockи QuantityOnOrdeгсуммируются, а затем умножаются на поле Priceдля получения общей суммы.

Подсказка

Вам нужно больше свободного места для набора длинного выражения? Можно расширить лю­бой столбец в Конструкторезапросов для увеличения видимой зоны, но в случае сложных вычислений этого все равно не хватит. Лучше щелкнуть кнопкой мыши в области Полеи на­жать сочетание клавиш + . Это действие распахивает на экране диалоговое окно Область ввода(Zoom), отображающее все содержимое в большом текстовом поле, разделен­ном на столько строк, сколько вам нужно. Когда просмотр или редактирование выражения за­вершены, щелкните мышью кнопку ОК,чтобы закрыть окно и сохранить изменения, или кнопку Отменадля отказа от них.

Выражения с текстовыми значениями

Несмотря на то, что обычно вычисляемые поля имеют дело с числовыми данными, но так бывает не всегда, существуют действительно удобные способы обработки текста.

Если у вас есть текстовые данные, конечно нельзя применять сложение, вычитание и другие арифметические операции. Но можно слить текст. Есть возможность связать не­сколько полей с адресной информацией и отображать их все в одном поле, экономя про­странство (и, возможно, облегчая экспорт этих данных и другую программу).

Для слияния текста применяется оператор амперсанд (&). Далее показано, как создать поле FullName(ФИО), в котором собрана информация из полей FirstNameи LastName:

FullName: [FirstName] & [LastName]

Это выражение выглядит достаточно корректным, но на самом деле у него есть один не­достаток. Поскольку вы не вставили никаких пробелов, имя и фамилия в результате прижаты

друг к другу, например, так: BenJenks. Лучше слить три фрагмента текста: имя, пробел и фамилию. Вот исправленная версия: FullName: [FirstName] & » » & [LastName]

Приведенное выражение создаст значение: Ben Jenks. Можно также поменять местами имя и фамилию и отделить их запятой, если вы предпочитаете указывать фамилию первой (например, Jenks, Ben) для облегчения сортировки: FullName: [LastName] & «, » & [FirstName]

Примечание

В программе Access есть два типа текстовых значений: те, которые вы извлекаете из других полей, и те, которые вы вводите непосредственно (или фиксированные). Когда вы вводите текстовые константы, такие как запятая или пробел в предыдущем примере, их следует за­ключать в кавычки, чтобы программа Access знала, где начинается и заканчивается текст.

Вы даже можете применять амперсанд для сцепления текста с числовыми значениями. Если вы хотите, чтобы слегка бесполезный текст «The price is» появлялся перед каждым зна­чением цены, примените следующее вычисляемое поле:

Price: «The price is: » & [Price]

Функции запросов

Теперь, возможно, вам приходит в голову мысль о том, что манипулировать числами и тек­стом можно более искусными способами — способами, которые предоставляют гораздо больше возможностей, чем простые арифметические операции. Вам может потребоваться округление чисел или преобразование строчных букв в прописные. Программа Access дей­ствительно предоставляет средства, называемые функциями и позволяющие поднять ваши выражения на более высокий уровень.

Читать еще:  Ide dma transfer access

Функция — это реализация встроенного алгоритма, принимающая ваши данные, выпол­няющая вычисления и возвращающая результат. Разница между функциями и математиче­скими операциями, как вы уже убедились на деле, заключается в том, что функции могут выполнять более сложные действия. У программы Access есть каталог с десятками разных функций, многие из которых реализуют такие приемы, которые вы даже не надеялись вы­полнить самостоятельно.

Функции пригодятся для всех видов обработки данных в программе Access. Вы можете примять их в:

вычисляемых полях для включения данных в результаты ваших запросов;

условиях отбора для задания записей, отображаемых в запросе;

коде на языке Visual Basic, многоцелевой расширяемой системе для программы Access, с которой вы познакомитесь в части V.

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

Примечание

Функции — это встроенная часть версии языка SQL (см. разд. «Режим SQL» главы 6), приме­няемой в программе Access для обработки данных.

Применение функций

Применяете ли вы простейшую или сложнейшую функцию, синтаксис — правила примене­ния функции в выражении — остается неизменным. Для использования функции просто введите ее имя с последующими скобками. Затем внутрь скобок поместите все данные, ко­торые нужны функции для выполнения ее вычислений (если это необходимо).

Для примера рассмотрим очень полезную функцию Round (), которая принимает число с дробной частью и убирает любые нежелательные позиции в дробной части. Эта функция — удобный способ приведения в порядок отображаемых значений вычисляемого поля. Вы оцените полезность функции Round (), если создадите выражение, подобное приведенному далее и вычисляющее цены, сниженные на 5%:

SalePrice: [Price] * 0.95

Примените это выражение к цене $43.97 и получите в результате 41.7715, что вряд ли будет выглядеть уместно на ценнике товара. Здесь пригодится функция Round (). Передайте ей неокругленное число и число знаков в дробной части, которое нужно сохранить:

SalePrice: Round([Price] * 0.95, 2)

Технически функции Round ( ) требуется две порции информации или два аргумента. Первый — это число, которое округляется (вданном случае это результат вычисления Price * 0. 95), а второй — количество цифр, которое вы хотите оставить справа от деся­тичной точки (2). В результате получается значение, округленное до двух десятичных зна­ков, или 41.77.

Примечание

Большинству функций, подобных Round (), требуются два или три аргумента. Но некоторые функции могут принять гораздо больше, в то время, как нескольким функциям вообще не нуж­ны аргументы

Часто задаваемый вопрос

Банковское округление

Похоже, программа Access округляет числа неправильно. Как быть?

Вас может удивить то, что Access округляет число 21.985 до 21.98. Если вас учили ок­руглять до большего числа, числа заканчивающиеся цифрой 5, то вы считаете, что ре­зультат должен быть 21.99. Этот способ называют арифметическим округлением. Про­грамма Access не применяет арифметическое округление — она выбирает банковское округление, которое лучше в некоторых случаях.

Разница между арифметическим и банковским округлением заключается в трактовке цифры 5. Поскольку число 21.985 находится точно в середине, между числами 21.98 и 21.99, не просто решить, что с ним делать. При постоянном округлении числа с 5 на кон­це до большего числа вносится систематическое отклонение в итоги и средние значения. Поскольку вы округляете до большего чаще, чем до меньшего, любые итоги или среднее, которые вы вычисляете, получаются чуть больше, чем следовало бы.

Банковское округление решает эту проблему округлением 5 в одних случаях до большего числа, а в других до меньшего, в зависимости от соседней четной или нечетной цифры.

Число 21.985 округляется до меньшего числа 21.98, а число 21.995 — до большего, 22. Это не единственный способ борьбы с систематическим отклонением (можно решать случайным образом, когда округлять, а когда нет), но это общепринятая практика в бух­галтерских расчетах и статистике.

Вложенные функции

В вычисляемом поле или условии отбора можно применять несколько функций. Этот прием известен как вложенные функции: специальный термин, обозначающий вставку одной функ­ции внутрь другой. Например, в программе Access есть встроенная функция определения абсолютного значения числа Abs ( ), преобразующая отрицательные числа в положительные (и оставляющая положительные числа без изменения). Далее приведен пример деления одного поля на другое и получения в результате заведомо положительного значения:

Speed: Abs ([DistanceTravelled] / [TimeTaken])

Если полученный результат нужно округлить, можно поместить целиком все выражение внутрь скобок функции Round ( ):

Speed: Round (Abs([DistanceTravelled] / [TimeTaken]), 2)

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

Speed: Abs(Round([DistanceTravelled] / [TimeTaken], 2) )

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

Вложенные функции быстро превращают выражение в потенциально опасное. Даже в сравнительно простом примере вычисления скорости трудно предсказать результат без по­шагового вычисления выражения. Одна не на месте стоящая или пропущенная скобка мо­жет привести к сбою вычисления. Если вы применяете вложенные функции, не пишите сра­зу выражение целиком — включайте функции в выражение поочередно и после вставки очередной функции выполняйте вычисление.

Построитель выражений

Функции — замечательное нововведение, но в программе Access может оказаться слишком много замечательных вещей. Программа предлагает перечень из десятков различных функ­ций, связанных с решением разнообразных задач, некоторые из этих функций предназначе­ны для выполнения специализированных математических и статистических вычислений.

Примечание

Для быстрого поиска нужных вам функций Access предлагает компонент, именуемый Построителем выражений.Для его запуска выполните следующие действия:

1. Откройте запрос в Конструкторе.

2. Щелкните правой кнопкой мыши поле, в которое вы хотите вставить выражение, и выберите команду Построить(Build).

Если вы создаете вычисляемое поле, нужно щелкнуть правой кнопкой мыши в ячейке Поле,Если создается условие отбора, следует щелкнуть правой кнопкой мыши в ячейке Условие отбора.


После выбора команды Построитьна экране появляется окно Построителя выражений,отображающее текущее содержимое поля (рис. 7.3).

Рис. 7.3. Построитель выраженийсостоит из текстового поля в верхней части окна, в котором можно редактировать выражение, кнопок быстрой вставки знаков обычных операций (таких как +, -, / и *, если почему-либо вы не можете их найти на клавиатуре), и трехпанельного обозревателя в нижней части окна, который поможет найти нужные поля и функции

3. Вставьте или отредактируйте выражение.

У Построителя выраженийесть два ускоряющих приема работы, которые вы, может быть, захотите испробовать. Можно вставлять имя без ввода с клавиатуры (рис. 7.4) и можно найти функцию с помощью обзора (рис. 7.5).

Примечание

Построитель выражений— универсальное средство создания выражений в вычисляемых по­лях и условиях отбора. Некоторые параметры имеют смысл только в одном из его назначений. Логические операторы, такие как символ равенства (=), And, Or, Not и Like, удобны для за­дания условий фильтрации (см. разд. «Построение условий отбора» главы 6), но бесполезны в вычисляемых полях.

Ссылка на основную публикацию
Adblock
detector