|
Особенности применения функции ROUND
|
|||
---|---|---|---|
#18+
Что нам говорит о ней справка? Вот что пишут здесь Функция Round Возвращает число, округленное до указанного количества десятичных разрядов. Round(выражение[, количество_деятичных _знаков]) Синтаксис функции Round имеет следующие аргументы: выражение - Обязательное. Числовое выражение, которое требуется округлить. количество_деятичных _знаков - Необязательное. Число, указывающее количество цифр справа от десятичного разделителя включены округления. Если не указано, функция округляет число до ближайшего целого числа. И больше ничего там не написано. Но поиск в интернете даёт следующее Функция Microsoft Access Round возвращает число, округленное до указанного количества десятичных знаков. Однако функция Round ведет себя немного странно, поэтому, прежде чем использовать эту функцию, пожалуйста, прочитайте следующее: Функция Round использует логику округления к четному. Если округляемое выражение заканчивается на 5, функция округления округляет выражение так, чтобы последняя цифра была четным числом. Пример: Round(12.55, 1) Result: 12.6 (округление вверх) Round(12.65, 1) Result: 12.6 (округление вниз) Round(12.75, 1) Result: 12.8 (округление вверх) Round(12.85, 1) Result: 12.8 (округление вниз) Как с этим бороться? Предлагают прибавить к числу половинку последнего знака. Вот так Round(12.55 + 0.005, 1) Result: 12.6 (округление вверх) Round(12.65 + 0.005, 1) Result: 12.7 (округление вверх) Round(12.75 + 0.005, 1) Result: 12.8 (округление вверх) Round(12.85 + 0.005, 1) Result: 12.9 (округление вверх) Другие предлагают прибавлять половинку предпоследнего знака при округлении Round(12.55 + 0.05, 1) Result: 12.6 (округление вверх) Round(12.65 + 0.05, 1) Result: 12.7 (округление вверх) Round(12.75 + 0.05, 1) Result: 12.8 (округление вверх) Round(12.85 + 0.05, 1) Result: 12.9 (округление вверх) Третьи предлагают просто добавить к числу 0,0001 Round(12.55 + 0.0001, 1) Result: 12.6 (округление вверх) Round(12.65 + 0.0001, 1) Result: 12.7 (округление вверх) Round(12.75 + 0.0001, 1) Result: 12.8 (округление вверх) Round(12.85 + 0.0001, 1) Result: 12.9 (округление вверх) Во все случаях округление даёт верный результат. ------------------------------------------------------------- А ты вложил уже свой кровный рубль в 50-ти миллиардное состояние Билла Гейтса? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 11:27 |
|
Особенности применения функции ROUND
|
|||
---|---|---|---|
#18+
Ну да... а поисследовать всё то же, но для отрицательных? Я уж не говорю о том, что сколько не добавляй, всегда найдётся значение, которое даст неверный результат. Скажем, для наименьшего из предложенных выше 0,0001 такой казус будет, к примеру, со значением 12.644445. Каждый тип округления требует своей собственной функции. К тому же учитывающей, что 0,5 в Single/Double может запросто оказаться как 0,499999..9999, так и 0,500000...0001. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 12:24 |
|
Особенности применения функции ROUND
|
|||
---|---|---|---|
#18+
Joss Функция Microsoft Access Round возвращает число, округленное до указанного количества десятичных знаков. Однако функция Round ведет себя немного странно, поэтому, прежде чем использовать эту функцию, пожалуйста, прочитайте следующее: эта функция врала всегда, даже в древнем dBASE и foxPRO столкнулись в расчете зарплаты, когда в расчете округлила некорректно ОТДЕЛЬНЫЕ значения сумм причем не предсказуемо, например 100.1 округляло до 101рубля написали программку, выловили еще несколько позиций --логики не поняли --- перешли на округление str(сумма+0.005,2) затем на str(сумма+0.0045,2) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 12:39 |
|
Особенности применения функции ROUND
|
|||
---|---|---|---|
#18+
тут - хорошая и быстрая реализация округления http://hiprog.com/index.php?option=com_content&task=view&id=160&Itemid=35 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 13:55 |
|
Особенности применения функции ROUND
|
|||
---|---|---|---|
#18+
AkinaЯ уж не говорю о том, что сколько не добавляй, всегда найдётся значение, которое даст неверный результат. Скажем, для наименьшего из предложенных выше 0,0001 такой казус будет, к примеру, со значением 12.644445. А какова функция округления? До какого знака Вы округляли? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 13:59 |
|
Особенности применения функции ROUND
|
|||
---|---|---|---|
#18+
Пардон, там опечатка. JossRound(12.65 + 0.0001, 1) Result: 12.7 (округление вверх) Round(12.64995 + 0.0001, 1) = 12.7 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 14:36 |
|
Особенности применения функции ROUND
|
|||
---|---|---|---|
#18+
Озверинтут - хорошая и быстрая реализация округления http://hiprog.com/index.php?option=com_content&task=view&id=160&Itemid=35 По-моему, очень неплохое решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 15:10 |
|
Особенности применения функции ROUND
|
|||
---|---|---|---|
#18+
На всякий случай записал сюда. Автор - Quick_Yak взято отсюда http://hiprog.com/index.php?option=com_content&task=view&id=160&Itemid=35 Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
заменил только Код: plaintext
Код: plaintext
Сделал проверку для одного знака после запятой. Дало ошибку в случаях: 12.35, 12.45, 12.85, 12.95 Заменил Код: plaintext
Код: plaintext
12.1, 12.2, 12.3, 12.4, 12.5, 12.6, 12.7, 12.8, 12.9, 13.0 А вот для 12.049, 12.149, 12,249 ... дают ошибку на 0.1 12.1, 12.2, 12.3, ... Для 12.039, 12.139, 12,239 ... результаты верны 12.0, 12.1, 12.2 Теперь заменил Код: plaintext
Код: plaintext
Ошибок для данных типа 12.049, 12.149 ошибок нет зато для 12.0499, 12.1499 опят на 0.1 больше чем по правилам округления. Продолжаю экспериментировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2019, 13:03 |
|
Особенности применения функции ROUND
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКАэта функция врала всегда, даже в древнем dBASE и foxPRO Эта функция никогда не врала и не врет. Просто используется так называемое банковское округление . Используйте его и не ломайте себе голову. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2019, 14:05 |
|
Особенности применения функции ROUND
|
|||
---|---|---|---|
#18+
AndrFПЕНСИОНЕРКАэта функция врала всегда, даже в древнем dBASE и foxPRO Эта функция никогда не врала и не врет. Просто используется так называемое банковское округление . Используйте его и не ломайте себе голову. конечно не врет, только округляло 100.1 до 101 с этого началось мое знакомство с этой функцией --после этого в серьезных расчетах я ей не доверяла ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2019, 14:09 |
|
Особенности применения функции ROUND
|
|||
---|---|---|---|
#18+
AndrF, была даже статья в журнале КОМПЬЮТЕР-ПРЕСС , объясняющая причину советов, как избавиться от этого, в статье не было перебрали все возможные варианты --всеж расчет зарплаты и не сошлись итоги ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2019, 14:16 |
|
Особенности применения функции ROUND
|
|||
---|---|---|---|
#18+
Посмотришь на этот геморрой - и начинаешь думать, не выполнять ли округление через преобразование в строку... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2019, 14:17 |
|
Особенности применения функции ROUND
|
|||
---|---|---|---|
#18+
AkinaПосмотришь на этот геморрой - и начинаешь думать, не выполнять ли округление через преобразование в строку... почти так и сделали, перебрав round-int-fix-str-format-дробную часть размера поля в таблице.....может и еще были варианты добавляли довесок к половине последнего разряда, для копеек --сначала 0,5 затем 0,45 зарплату вообще считали в копейках, а только на печати делили на 100 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2019, 14:31 |
|
Особенности применения функции ROUND
|
|||
---|---|---|---|
#18+
помню, что получили в итоге val(str(12.125,2))=12.13 val(format(12.125,"0.00"))=12.12 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2019, 14:36 |
|
Особенности применения функции ROUND
|
|||
---|---|---|---|
#18+
AndrFПЕНСИОНЕРКАэта функция врала всегда, даже в древнем dBASE и foxPRO Эта функция никогда не врала и не врет. Просто используется так называемое банковское округление . Используйте его и не ломайте себе голову. Что такое "Банковское округление" Похоже, программа 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. Это не единственный способ борьбы с систематическим отклонением (можно решать случайным образом, когда округлять, а когда нет), но это общепринятая практика в бухгалтерских расчетах и статистике. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2019, 14:51 |
|
Особенности применения функции ROUND
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКАперебрали все возможные варианты --всеж расчет зарплаты и не сошлись итоги что помешало fix-ировать з/п и остаток переносить на след расчетный период ? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2019, 14:53 |
|
Особенности применения функции ROUND
|
|||
---|---|---|---|
#18+
alecko, позднее перешли на перенос копеек на следующий месяц, когда ширины талончика стало не хватать на зарплату в тысячах(до деноминации) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2019, 14:56 |
|
Особенности применения функции ROUND
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКА....конечно не врет, только округляло 100.1 до 101 с этого началось мое знакомство с этой функцией --после этого в серьезных расчетах я ей не доверяла Код: vbnet 1. 2.
-никак не могу "познакомится" (может так происходило не из-за применения Round, а по какой-нибудь другой причине?) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2019, 16:09 |
|
|
start [/forum/topic.php?fid=45&fpage=36&tid=1610865]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 320ms |
total: | 459ms |
0 / 0 |