powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Казус с банковским округлением
25 сообщений из 33, страница 1 из 2
Казус с банковским округлением
    #39631682
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Считается, что в бухгалтерских документах правильнее использовать банковское округление, где четное старшее число округляет 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.
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39631688
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17.04.2018 15:22, svnvlad пишет:
> MySQL однако же оказался умнее

ему никто не указ - ни стандарты, ни арифметика...

зы: не меряй это ЭТИМ.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39631689
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 должно получится
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39631691
под ван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У нас что тут началась неделя округлений?
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39631695
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39631698
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
под ванУ нас что тут началась неделя округлений?
Типа того. Один гвоздь в ботинке способен испортить все путешествие.
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39631699
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дичь!
Круглые сутки!
Семь дней в неделю!
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39631702
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladНаписал формулу, работающую по логике как в школе учили - округляем последовательно каждый разряд, затем следующий округляем в зависимости от того, больше, меньше или равно 5.

Меня в школе и после школы учили совсем по другому.
1. Отбрасываем все разряды кроме последнего перед округляемым.
2. Округляем в соответствии с правилом.
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39631711
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисsvnvladНаписал формулу, работающую по логике как в школе учили - округляем последовательно каждый разряд, затем следующий округляем в зависимости от того, больше, меньше или равно 5.

Меня в школе и после школы учили совсем по другому.
1. Отбрасываем все разряды кроме последнего перед округляемым.
2. Округляем в соответствии с правилом.
:D озадачили...
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39631712
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всю жизнь округлял каждый разряд)))
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39631715
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17.04.2018 15:37, Соколинский Борис пишет:
> Меня в школе и после школы учили совсем по другому.
> 1. Отбрасываем все разряды кроме последнего перед округляемым.
> 2. Округляем в соответствии с правилом.

тебя учили в эпоху тоталитаризма.
пора отринуть своё позорное прошлое.
молодая поросль взошла на ниве либерального образования.
им принадлежит будущее.

(восклицательных знаков добавить по вкусу)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39631726
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисsvnvladНаписал формулу, работающую по логике как в школе учили - округляем последовательно каждый разряд, затем следующий округляем в зависимости от того, больше, меньше или равно 5.

Меня в школе и после школы учили совсем по другому.
1. Отбрасываем все разряды кроме последнего перед округляемым.
2. Округляем в соответствии с правилом.
В случае с числом 0.6349 логично - последнюю цифру просто отбрасываем и 4 округляем в меньшую сторону, до 0.63.
А теперь число 0.6459 - оно очевидно ближе к 0.65, т.к. там не 50, а 59 в конце. Т.е. правильно будет считать его как 0.646 -> 0.65. Округляя по банковски же, мы отбросим последнюю девятку, и 0.645 округлим до 0.64, т.к. 4 - четная.
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39631739
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladВ случае с числом 0.6349 логично - последнюю цифру просто отбрасываем и 4 округляем в меньшую сторону, до 0.63.
А теперь число 0.6459 - оно очевидно ближе к 0.65, т.к. там не 50, а 59 в конце. Т.е. правильно будет считать его как 0.646 -> 0.65. Округляя по банковски же, мы отбросим последнюю девятку, и 0.645 округлим до 0.64, т.к. 4 - четная.
YouTube Video
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39631745
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladА теперь число 0.6459 - оно очевидно ближе к 0.65Округление и поиск ближайшего числа это разные вещи. Если вам нужно округление - делаете так, как сказал Борис. Если нужно ближайшее число - берете двух соседних кандидатов (0.63 и 0.64) и вычитаете из них исходное число. Где меньше разность, то и ближе
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39631763
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,
ну и что, я только что смотрел такое видео. Но там ничего нет про банковское округление.
И я еще в детстве недоумевал, что значит "т.к. пятерка посередине, то ДОГОВОРИЛИСЬ округлять ее в большую сторону". Как это можно договориться регулярно наращивать ошибку? Банковское округление хотя бы тупо распределяет ее по очереди то туда, то сюда, т.к. она на самом деле "ни вашим, ни нашим".

Тут логика судя по всему должна быть такой:

Берем число например 0.6459.
1. Отбрасываем все после 3 разряда, получаем 0.645.
2. Если оно равно исходному числу (0.6459 = 0.645), то значит там 5, которая ровно посередине - и далее используем банковское округление.
3. Если же числа не равны, значит там не ровно 5, а больше или меньше, значит используем НЕ банковское, а используем обычное.
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39631767
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladКак это можно договориться регулярно наращивать ошибку? Любое округление порождает ошибки, просто по определению. Банковское минимизирует ошибку при суммировании, арифметическое - при вычитании.
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39631770
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladМимопроходящий,
ну и что, я только что смотрел такое видео. Но там ничего нет про банковское округление.
И я еще в детстве недоумевал, что значит "т.к. пятерка посередине, то ДОГОВОРИЛИСЬ округлять ее в большую сторону". Как это можно договориться регулярно наращивать ошибку? Банковское округление хотя бы тупо распределяет ее по очереди то туда, то сюда, т.к. она на самом деле "ни вашим, ни нашим".

Тут логика судя по всему должна быть такой:

Берем число например 0.6459.
1. Отбрасываем все после 3 разряда, получаем 0.645.
2. Если оно равно исходному числу (0.6459 = 0.645), то значит там 5, которая ровно посередине - и далее используем банковское округление.
3. Если же числа не равны, значит там не ровно 5, а больше или меньше, значит используем НЕ банковское, а используем обычное.
Тебе осталось понять, что для "банковских" вычислений не требуется "округлений". Достаточно разобраться в том, как хранятся в ЭВМ вещественные числа и отчего их не везде можно использовать.
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39631783
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДТебе осталось понять, что для "банковских" вычислений не требуется "округлений". Достаточно разобраться в том, как хранятся в ЭВМ вещественные числа и отчего их не везде можно использовать.
Почему?
Тариф за тонну 5,5$. При пересчете на рубли с учетом курса 58,5814 получается 322,1977 руб. за тонну.
За 15,5 тонн получится 4994,06435 руб.
И таких строк десятки.
Нужно вычислить общую сумму и вывести каждую строку, округленную до 2 знаков, и общую сумму, округленную до 2 знаков.
Не говорю уже о том, что сумма округленных строк и округление суммы неокругленных строк выдаст разный результат.
Но главное, что нельзя округлять тариф до 2 знаков, т.к., за сотни тонн эти разряды превратятся в десятки рублей ошибки.
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39631810
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже если тариф округлить до 2 знаков. 15,5 тонн сведет точность на нет.
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39631834
jmp_original
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1856 сообщений у человека... просто жесть.
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39631846
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad,
Тебе обязательно нужно одну тему в разных топиках обсуждать?
Банковское округление тут вообще не причем.
Умножаешь тариф на массу и округляешь до копеек - получишь точное соответствие в копейках.
Как корректно перевести в рубли уже обсудили.
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39632184
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad, цифры несут какой-то физический смысл. Если это стоимость какого-то товара, то у него есть физическое ограничение в разрядах -- 2 разряда. Как ты будешь в магазине платить 20 рублей и 06435 копейки при стоимости товара 20,06435 рублей?! Не всегда нужна точность до 12 знака после запятой.
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39632213
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldmi45svnvlad, цифры несут какой-то физический смысл. Если это стоимость какого-то товара, то у него есть физическое ограничение в разрядах -- 2 разряда. Стоимость - производная величина, имеющая размерность "деньги/ед.товара", и может иметь сколько угодно знаков после запятой. Аналогично с тарифами и курсом доллара.
Но когда в результате перемножений возникают просто "деньги", полученная величина обязательно должна округляться до минимальной единицы, такой величины как "4994,06435 рублей" не существует.
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39632295
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисСтоимость - производная величина, имеющая размерность "деньги/ед.товара", и может иметь сколько угодно знаков после запятой.

Наверное, более общепринято называть эту штуку "Цена" = "деньги/ед.товара". А "Стоимость" = "деньги".

В школе даже тема так и называлась - "Цена, количество, стоимость", и с дробями выводили одно из другого.
...
Рейтинг: 0 / 0
Казус с банковским округлением
    #39632477
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисsvnvladНаписал формулу, работающую по логике как в школе учили - округляем последовательно каждый разряд, затем следующий округляем в зависимости от того, больше, меньше или равно 5.

Меня в школе и после школы учили совсем по другому.
1. Отбрасываем все разряды кроме последнего перед округляемым.
2. Округляем в соответствии с правилом.Когда .5 округляется всегда вверх, можно конечно отбросить все последующие разряды. Но для банковского округления это не работает: .5 надо округлять к четному, а .50001 таки всегда вверх.
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Казус с банковским округлением
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]