Как автоматически использовать соответствующую точность / шкалу для числового типа c в postgres? - PullRequest
1 голос
/ 20 апреля 2020

У меня есть 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". Например, как вы ожидаете, что это сработает, если вы рассчитываете это вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...