У меня есть numeric
тип postgres со значением 1.9999999999999999
(масштаб 16), и я запускаю запрос, который вычисляет (1.9999999999999999+2)/2
. Точный ответ должен быть 1.99999999999999995
(масштаб должен быть 17), но вместо этого я получаю 2.0000000000000000
(масштаб снова равен 16), потому что превышена точность / масштаб по умолчанию numeric
.
Я мог бы получить обойти это, выполнив запрос и выполнив (1.9999999999999999+2)/2::numeric(1000,999)
, но затем, когда я получаю это значение, которое было сохранено в базе данных, оно фактически появляется с 1000 цифрами «0» в выходных данных запроса SELECT.
Как я могу сделать одно из следующих действий?
- Сказать postgres никогда не округлять значение, если оно превышает масштаб, но вместо этого автоматически увеличивать масштаб
- Сказать postgres не сохранять трейлинг Цифры «0» после десятичной дроби и содержат только минимальное количество необходимых цифр, так что я могу использовать максимально возможную шкалу
::numeric(1000,999)
, но она сохраняет только необходимые цифры?
I ' Я хотел бы получить точные результаты для любых операций, которые я выполняю для числовых значений c, с максимальной точностью, которую позволяет postgres, но не хранить ненужные конечные цифры "0". Например, как вы ожидаете, что это сработает, если вы рассчитываете это вручную.