powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Банковское округление средствами MySQL
17 сообщений из 17, страница 1 из 1
Банковское округление средствами MySQL
    #39595423
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
Можно ли реализовать банковское округление средствами MySQL?
Денежные поля у меня идут с 4 знаками после запятой, а для вывода бухгалтерия требует округлять до 2 знаков. И в результате при суммировании и выводе на 1 копейку не сходится. Это, говорят, известная проблема в банковском деле, которая значительно сокращается при банковском округлении, когда 5 с четными сотыми округляется в меньшую сторону, с нечетными - в большую.
Можно ли как-то это сделать с помощью MySQL?
...
Рейтинг: 0 / 0
Банковское округление средствами MySQL
    #39595434
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladсокращается при банковском округлении, когда 5 с четными сотыми округляется в меньшую сторону, с нечетными - в большую.Это ложь. Та самая, которая статистика.

svnvladМожно ли как-то это сделать с помощью MySQL?Для начала - какой именно тип округляемого значения? Ибо, согласно мануалу:
https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_round For exact-value numbers, ROUND() uses the “round half away from zero” or “round toward nearest” rule: A value with a fractional part of .5 or greater is rounded up to the next integer if positive or down to the next integer if negative. (In other words, it is rounded away from zero.) A value with a fractional part less than .5 is rounded down to the next integer if positive or up to the next integer if negative.

For approximate-value numbers, the result depends on the C library. On many systems, this means that ROUND() uses the "round to nearest even" rule: A value with any fractional part is rounded to the nearest even integer.
...
Рейтинг: 0 / 0
Банковское округление средствами MySQL
    #39595439
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaFor approximate-value numbers, the result depends on the C library. On many systems, this means that ROUND() uses the "round to nearest even" rule: A value with any fractional part is rounded to the nearest even integer.[/quot]
Что есть C library?

SELECT ROUND(0.025, 2), ROUND (0.035, 2) выдает результат 0.03 и 0.04 соответственно.
...
Рейтинг: 0 / 0
Банковское округление средствами MySQL
    #39595450
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,
т.е. на одних системах ROUND работает как обычно, на других как банковское? Почему такой произвол? Должно же быть единообразие.
...
Рейтинг: 0 / 0
Банковское округление средствами MySQL
    #39595458
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladSELECT ROUND(0.025, 2), ROUND (0.035, 2) выдает результат 0.03 и 0.04 соответственно.
Код: sql
1.
2.
3.
4.
5.
6.
7.
mysql> SELECT ROUND(0.025, 2), ROUND (0.035, 2), ROUND(25E-3, 2), ROUND (35E-3, 2);
+-----------------+------------------+-----------------+------------------+
| ROUND(0.025, 2) | ROUND (0.035, 2) | ROUND(25E-3, 2) | ROUND (35E-3, 2) |
+-----------------+------------------+-----------------+------------------+
|            0.03 |             0.04 |            0.02 |             0.04 |
+-----------------+------------------+-----------------+------------------+
1 row in set (0.03 sec)


svnvladт.е. на одних системах ROUND работает как обычно, на других как банковское? Почему такой произвол? Должно же быть единообразие.Расскажи это тем, кто пишет используемые при компиляции библиотеки функций.
...
Рейтинг: 0 / 0
Банковское округление средствами MySQL
    #39595463
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,
округляемые поля типа DECIMAL(11,5)
...
Рейтинг: 0 / 0
Банковское округление средствами MySQL
    #39595472
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT ROUND(CAST(0.025 AS DECIMAL(11,5)), 2), ROUND(CAST(0.035 AS DECIMAL(11,5)), 2)
Результат 0,03 и 0,04
...
Рейтинг: 0 / 0
Банковское округление средствами MySQL
    #39595485
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladокругляемые поля типа DECIMAL(11,5) То есть, в классификации документации, точные (exact-value numbers) - поэтому округление выполняется по арифметическим правилам.
К сожалению, CAST/CONVERT не имеют типа приведения к FLOAT/DOUBLE типу.
Всё, что можно предложить - это изменение типа поля на DOUBLE.
...
Рейтинг: 0 / 0
Банковское округление средствами MySQL
    #39595502
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaВсё, что можно предложить - это изменение типа поля на DOUBLE.
Может можно функцию в БД написать?
...
Рейтинг: 0 / 0
Банковское округление средствами MySQL
    #39595528
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно, пиши... типа MyRound(val) = Round(val/2)*2
...
Рейтинг: 0 / 0
Банковское округление средствами MySQL
    #39595529
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, эта же формула объясняет, почему утверждения о бОльшей точности расчётов при булгахтерском округлении есть голимый бред.
...
Рейтинг: 0 / 0
Банковское округление средствами MySQL
    #39595585
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я с детства, когда на математике объяснили правила округления, не понимал, почему 5 округляется всегда в большую сторону, ведь оно ровно посередине между 0 и 1. Оно действительно не должно округляться всегда в большую сторону, это неправильно. Поэтому банковское округление представляется более справедливым.
...
Рейтинг: 0 / 0
Банковское округление средствами MySQL
    #39595591
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То, что в Казахстане приняли закон об арифметическом округлении
автор 5-1. Установить, что при наличной форме платежей, за исключением выплат, предусмотренных пунктом 5 настоящего Указа, применяется арифметический метод округления суммы платежей (сумму тиын до 50 тиынов округлять до 0; от 50 тиын и выше округлять до 1 тенге).

больше похоже на "а давайте за...ним вот так, и все тут". Объяснить почему они решили именно так, они не смогут.
...
Рейтинг: 0 / 0
Банковское округление средствами MySQL
    #39595649
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladЗдравствуйте!
Можно ли реализовать банковское округление средствами MySQL?


Можно.

svnvladДенежные поля у меня идут с 4 знаками после запятой, а для вывода бухгалтерия требует округлять до 2 знаков.


Требуют -- округляй.

svnvlad И в результате при суммировании и выводе на 1 копейку не сходится. Это, говорят, известная проблема в банковском деле, которая значительно сокращается при банковском округлении, когда 5 с четными сотыми округляется в меньшую сторону, с нечетными - в большую.
Можно ли как-то это сделать с помощью MySQL?

Можно.
На самом деле тебе не нужны ДЕНЕЖНЫЕ поля. Тебе нужны поля с типом что-то вроде numeric(20,2)
...
Рейтинг: 0 / 0
Банковское округление средствами MySQL
    #39595690
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНа самом деле тебе не нужны ДЕНЕЖНЫЕ поля. Тебе нужны поля с типом что-то вроде numeric(20,2)
NUMERIC(11,5)
...
Рейтинг: 0 / 0
Банковское округление средствами MySQL
    #39595695
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вообще-то DECIMAL и NUMERIC - это в понятиях MySQL синонимы.
...
Рейтинг: 0 / 0
Банковское округление средствами MySQL
    #39595773
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina, DECIMAL имел в виду.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Банковское округление средствами MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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