Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Банковское округление средствами MySQL / 17 сообщений из 17, страница 1 из 1
02.02.2018, 10:07
    #39595423
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Банковское округление средствами MySQL
Здравствуйте!
Можно ли реализовать банковское округление средствами MySQL?
Денежные поля у меня идут с 4 знаками после запятой, а для вывода бухгалтерия требует округлять до 2 знаков. И в результате при суммировании и выводе на 1 копейку не сходится. Это, говорят, известная проблема в банковском деле, которая значительно сокращается при банковском округлении, когда 5 с четными сотыми округляется в меньшую сторону, с нечетными - в большую.
Можно ли как-то это сделать с помощью MySQL?
...
Рейтинг: 0 / 0
02.02.2018, 10:20
    #39595434
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Банковское округление средствами MySQL
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
02.02.2018, 10:25
    #39595439
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Банковское округление средствами MySQL
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
02.02.2018, 10:39
    #39595450
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Банковское округление средствами MySQL
Akina,
т.е. на одних системах ROUND работает как обычно, на других как банковское? Почему такой произвол? Должно же быть единообразие.
...
Рейтинг: 0 / 0
02.02.2018, 10:48
    #39595458
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Банковское округление средствами MySQL
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
02.02.2018, 10:57
    #39595463
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Банковское округление средствами MySQL
Akina,
округляемые поля типа DECIMAL(11,5)
...
Рейтинг: 0 / 0
02.02.2018, 11:09
    #39595472
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Банковское округление средствами MySQL
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
02.02.2018, 11:27
    #39595485
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Банковское округление средствами MySQL
svnvladокругляемые поля типа DECIMAL(11,5) То есть, в классификации документации, точные (exact-value numbers) - поэтому округление выполняется по арифметическим правилам.
К сожалению, CAST/CONVERT не имеют типа приведения к FLOAT/DOUBLE типу.
Всё, что можно предложить - это изменение типа поля на DOUBLE.
...
Рейтинг: 0 / 0
02.02.2018, 11:55
    #39595502
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Банковское округление средствами MySQL
AkinaВсё, что можно предложить - это изменение типа поля на DOUBLE.
Может можно функцию в БД написать?
...
Рейтинг: 0 / 0
02.02.2018, 12:30
    #39595528
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Банковское округление средствами MySQL
Можно, пиши... типа MyRound(val) = Round(val/2)*2
...
Рейтинг: 0 / 0
02.02.2018, 12:31
    #39595529
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Банковское округление средствами MySQL
Кстати, эта же формула объясняет, почему утверждения о бОльшей точности расчётов при булгахтерском округлении есть голимый бред.
...
Рейтинг: 0 / 0
02.02.2018, 13:37
    #39595585
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Банковское округление средствами MySQL
Я с детства, когда на математике объяснили правила округления, не понимал, почему 5 округляется всегда в большую сторону, ведь оно ровно посередине между 0 и 1. Оно действительно не должно округляться всегда в большую сторону, это неправильно. Поэтому банковское округление представляется более справедливым.
...
Рейтинг: 0 / 0
02.02.2018, 13:41
    #39595591
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Банковское округление средствами MySQL
То, что в Казахстане приняли закон об арифметическом округлении
автор 5-1. Установить, что при наличной форме платежей, за исключением выплат, предусмотренных пунктом 5 настоящего Указа, применяется арифметический метод округления суммы платежей (сумму тиын до 50 тиынов округлять до 0; от 50 тиын и выше округлять до 1 тенге).

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


Можно.

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


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

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

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


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