Основной причиной, по которой я мог бы увидеть что-то подобное, была бы проблема типа. Например, это может произойти, если вы используете FLOAT вместо NUMERIC, вы можете получить немного другой ответ. Между прочим, это слишком распространенная ошибка.
Я бы рекомендовал дважды проверить вашу схему, чтобы убедиться, что вы используете NUMERIC по всем направлениям здесь. NUMERIC невероятно мощен в PostgreSQL, работает очень хорошо и правильно поддерживает операции произвольной точности. Если вы не можете изменить тип данных, приведите ваши поля к числовым в вашем запросе.
Типы FLOAT (включая DOUBLE) - это двоичные числа с фиксированной точностью, и они не всегда точно соответствуют числам с базовыми 10. ЦИФРЫ хранятся внутри как базовая 1000 (что означает 9 цифр на 30 бит), и это очень эффективно для преобразования в / из двоичного файла. Точность также произвольна, хотя она имеет максимум. Однако для финансовых ресурсов максимальные значения или точность не являются проблемой для числовых типов данных. Вы должны использовать их свободно.