|
|
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
Считается, что в бухгалтерских документах правильнее использовать банковское округление, где четное старшее число округляет 5 в меньшую сторону, а нечетное в большую. Написал формулу, работающую по логике как в школе учили - округляем последовательно каждый разряд, затем следующий округляем в зависимости от того, больше, меньше или равно 5. Так вот, казус получился! Берем число 0.6349 и округляем его до 2 знаков. ОЧЕВИДНО, что это должно быть 0.63, т.к. 49 меньше 50. Но по правилам округления получается: 0.6349 -> 0.635 -> 0.64. Так бы и округляло обычное НЕ-банковское, но MySQL однако же оказался умнее и ROUND(0.6349) выдал как 0.63. А самописная формула BANK_ROUND по-школьному выдала 0.64. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 15:22 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
17.04.2018 15:22, svnvlad пишет: > MySQL однако же оказался умнее ему никто не указ - ни стандарты, ни арифметика... зы: не меряй это ЭТИМ. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 15:30 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
svnvladБерем число 0.6349 и округляем его до 2 знаков. ОЧЕВИДНО, что это должно быть 0.63, т.к. 49 меньше 50. Но по правилам округления получается: 0.6349 -> 0.635 -> 0.64. Так бы и округляло обычное НЕ-банковское, но MySQL однако же оказался умнее и ROUND(0.6349) выдал как 0.63. А самописная формула BANK_ROUND по-школьному выдала 0.64.Имхо гон. Если округляешь до 2 цифр - то работаешь с числом 0.634. А его как не округляй - 0.63 должно получится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 15:31 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
У нас что тут началась неделя округлений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 15:31 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
white_niggersvnvladБерем число 0.6349 и округляем его до 2 знаков. ОЧЕВИДНО, что это должно быть 0.63, т.к. 49 меньше 50. Но по правилам округления получается: 0.6349 -> 0.635 -> 0.64. Так бы и округляло обычное НЕ-банковское, но MySQL однако же оказался умнее и ROUND(0.6349) выдал как 0.63. А самописная формула BANK_ROUND по-школьному выдала 0.64.Имхо гон. Если округляешь до 2 цифр - то работаешь с числом 0.634. А его как не округляй - 0.63 должно получится там же изначально были 4 цифры: 0.6349, а 49 округлится как 50. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 15:33 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
под ванУ нас что тут началась неделя округлений? Типа того. Один гвоздь в ботинке способен испортить все путешествие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 15:34 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
Дичь! Круглые сутки! Семь дней в неделю! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 15:35 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
svnvladНаписал формулу, работающую по логике как в школе учили - округляем последовательно каждый разряд, затем следующий округляем в зависимости от того, больше, меньше или равно 5. Меня в школе и после школы учили совсем по другому. 1. Отбрасываем все разряды кроме последнего перед округляемым. 2. Округляем в соответствии с правилом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 15:37 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисsvnvladНаписал формулу, работающую по логике как в школе учили - округляем последовательно каждый разряд, затем следующий округляем в зависимости от того, больше, меньше или равно 5. Меня в школе и после школы учили совсем по другому. 1. Отбрасываем все разряды кроме последнего перед округляемым. 2. Округляем в соответствии с правилом. :D озадачили... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 15:47 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
всю жизнь округлял каждый разряд))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 15:47 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
17.04.2018 15:37, Соколинский Борис пишет: > Меня в школе и после школы учили совсем по другому. > 1. Отбрасываем все разряды кроме последнего перед округляемым. > 2. Округляем в соответствии с правилом. тебя учили в эпоху тоталитаризма. пора отринуть своё позорное прошлое. молодая поросль взошла на ниве либерального образования. им принадлежит будущее. (восклицательных знаков добавить по вкусу) Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 15:49 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисsvnvladНаписал формулу, работающую по логике как в школе учили - округляем последовательно каждый разряд, затем следующий округляем в зависимости от того, больше, меньше или равно 5. Меня в школе и после школы учили совсем по другому. 1. Отбрасываем все разряды кроме последнего перед округляемым. 2. Округляем в соответствии с правилом. В случае с числом 0.6349 логично - последнюю цифру просто отбрасываем и 4 округляем в меньшую сторону, до 0.63. А теперь число 0.6459 - оно очевидно ближе к 0.65, т.к. там не 50, а 59 в конце. Т.е. правильно будет считать его как 0.646 -> 0.65. Округляя по банковски же, мы отбросим последнюю девятку, и 0.645 округлим до 0.64, т.к. 4 - четная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 15:59 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
svnvladВ случае с числом 0.6349 логично - последнюю цифру просто отбрасываем и 4 округляем в меньшую сторону, до 0.63. А теперь число 0.6459 - оно очевидно ближе к 0.65, т.к. там не 50, а 59 в конце. Т.е. правильно будет считать его как 0.646 -> 0.65. Округляя по банковски же, мы отбросим последнюю девятку, и 0.645 округлим до 0.64, т.к. 4 - четная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 16:07 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
svnvladА теперь число 0.6459 - оно очевидно ближе к 0.65Округление и поиск ближайшего числа это разные вещи. Если вам нужно округление - делаете так, как сказал Борис. Если нужно ближайшее число - берете двух соседних кандидатов (0.63 и 0.64) и вычитаете из них исходное число. Где меньше разность, то и ближе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 16:10 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий, ну и что, я только что смотрел такое видео. Но там ничего нет про банковское округление. И я еще в детстве недоумевал, что значит "т.к. пятерка посередине, то ДОГОВОРИЛИСЬ округлять ее в большую сторону". Как это можно договориться регулярно наращивать ошибку? Банковское округление хотя бы тупо распределяет ее по очереди то туда, то сюда, т.к. она на самом деле "ни вашим, ни нашим". Тут логика судя по всему должна быть такой: Берем число например 0.6459. 1. Отбрасываем все после 3 разряда, получаем 0.645. 2. Если оно равно исходному числу (0.6459 = 0.645), то значит там 5, которая ровно посередине - и далее используем банковское округление. 3. Если же числа не равны, значит там не ровно 5, а больше или меньше, значит используем НЕ банковское, а используем обычное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 16:24 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
svnvladКак это можно договориться регулярно наращивать ошибку? Любое округление порождает ошибки, просто по определению. Банковское минимизирует ошибку при суммировании, арифметическое - при вычитании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 16:28 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
svnvladМимопроходящий, ну и что, я только что смотрел такое видео. Но там ничего нет про банковское округление. И я еще в детстве недоумевал, что значит "т.к. пятерка посередине, то ДОГОВОРИЛИСЬ округлять ее в большую сторону". Как это можно договориться регулярно наращивать ошибку? Банковское округление хотя бы тупо распределяет ее по очереди то туда, то сюда, т.к. она на самом деле "ни вашим, ни нашим". Тут логика судя по всему должна быть такой: Берем число например 0.6459. 1. Отбрасываем все после 3 разряда, получаем 0.645. 2. Если оно равно исходному числу (0.6459 = 0.645), то значит там 5, которая ровно посередине - и далее используем банковское округление. 3. Если же числа не равны, значит там не ровно 5, а больше или меньше, значит используем НЕ банковское, а используем обычное. Тебе осталось понять, что для "банковских" вычислений не требуется "округлений". Достаточно разобраться в том, как хранятся в ЭВМ вещественные числа и отчего их не везде можно использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 16:33 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
чччДТебе осталось понять, что для "банковских" вычислений не требуется "округлений". Достаточно разобраться в том, как хранятся в ЭВМ вещественные числа и отчего их не везде можно использовать. Почему? Тариф за тонну 5,5$. При пересчете на рубли с учетом курса 58,5814 получается 322,1977 руб. за тонну. За 15,5 тонн получится 4994,06435 руб. И таких строк десятки. Нужно вычислить общую сумму и вывести каждую строку, округленную до 2 знаков, и общую сумму, округленную до 2 знаков. Не говорю уже о том, что сумма округленных строк и округление суммы неокругленных строк выдаст разный результат. Но главное, что нельзя округлять тариф до 2 знаков, т.к., за сотни тонн эти разряды превратятся в десятки рублей ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 16:43 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
Даже если тариф округлить до 2 знаков. 15,5 тонн сведет точность на нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 16:57 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
1856 сообщений у человека... просто жесть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 17:19 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
svnvlad, Тебе обязательно нужно одну тему в разных топиках обсуждать? Банковское округление тут вообще не причем. Умножаешь тариф на массу и округляешь до копеек - получишь точное соответствие в копейках. Как корректно перевести в рубли уже обсудили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 17:25 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
svnvlad, цифры несут какой-то физический смысл. Если это стоимость какого-то товара, то у него есть физическое ограничение в разрядах -- 2 разряда. Как ты будешь в магазине платить 20 рублей и 06435 копейки при стоимости товара 20,06435 рублей?! Не всегда нужна точность до 12 знака после запятой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 09:28 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
goldmi45svnvlad, цифры несут какой-то физический смысл. Если это стоимость какого-то товара, то у него есть физическое ограничение в разрядах -- 2 разряда. Стоимость - производная величина, имеющая размерность "деньги/ед.товара", и может иметь сколько угодно знаков после запятой. Аналогично с тарифами и курсом доллара. Но когда в результате перемножений возникают просто "деньги", полученная величина обязательно должна округляться до минимальной единицы, такой величины как "4994,06435 рублей" не существует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 10:16 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисСтоимость - производная величина, имеющая размерность "деньги/ед.товара", и может иметь сколько угодно знаков после запятой. Наверное, более общепринято называть эту штуку "Цена" = "деньги/ед.товара". А "Стоимость" = "деньги". В школе даже тема так и называлась - "Цена, количество, стоимость", и с дробями выводили одно из другого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 11:33 |
|
||
|
Казус с банковским округлением
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисsvnvladНаписал формулу, работающую по логике как в школе учили - округляем последовательно каждый разряд, затем следующий округляем в зависимости от того, больше, меньше или равно 5. Меня в школе и после школы учили совсем по другому. 1. Отбрасываем все разряды кроме последнего перед округляемым. 2. Округляем в соответствии с правилом.Когда .5 округляется всегда вверх, можно конечно отбросить все последующие разряды. Но для банковского округления это не работает: .5 надо округлять к четному, а .50001 таки всегда вверх. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 13:44 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39631770&tid=2040989]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
155ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
80ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 519ms |

| 0 / 0 |
