округляет число в большую сторону если последнее число больше 4.
select (9999::numeric(18, 3) / 10000)::numeric(18, 3);
Результат: 1.000
select (9991::numeric(18, 3) / 10000)::numeric(18, 3);
Результат: 0.999 - т.е. округления не произошло
Если выставить шкалу на 4, то таких проблем нет, оно выдаёт как есть, без округления
select (9999::numeric(18, 3) / 10000)::numeric(18, 4);
Результат: 0.9999
Это можно как-то пофиксить без танца с бубнами?)
Если я правильно понял, что вы хотите, то select trunc(9999::numeric(18, 3)/10000, 3)
Да, спасибо, это работает! Пойду читать почему)))
Функция trunc просто обрезает число до нужного количества знаков после запятой, а преобразование к numeric с заданной точностью порождает вызов функции round с этой точностью
Обсуждают сегодня