2015-07-10 4 views
-1

Я хочу разделить значения и округлить их до 8 знаков после запятой, но я обнаружил, что некоторые подразделения возвращаются в научной нотации.postgresql round division

Как я могу всегда обойти подразделение без научной нотации?

  • select round(123/100000000::decimal, 8)

    возвращается 0.00000123, как и ожидалось.

  • select round(1/100000000::decimal, 8)

    возвращается 1e-8 но ... я ожидал 0.00000001

Как я могу округлить 1/100000000 до 8 знаков после запятой и вернуть 0,00000001?

SQL скрипка: http://sqlfiddle.com/#!15/9eecb7db59d16c80417c72d1e1f4fbf1/1534

Спасибо за помощь. лучше,

+0

Я думаю, что по умолчанию используется значение 6. Попробуйте использовать что-то вроде 'decimal (18, 8)'. –

+0

@ GordonLinoff, не работает тоже. см.: http://sqlfiddle.com/#!15/9eecb7db59d16c80417c72d1e1f4fbf1/1534 – user1221679

+1

'1e-8' и' 0.00000001' - это то же самое, не так ли? –

ответ

1

Это слишком долго для комментария.

Фактически, когда я пытаюсь выполнить код в Postgres 9.3.4 с помощью pgadmin, оба возвращают нужные значения. Значения: не в экспоненциальных обозначениях. Следовательно, я подозреваю, что это проблема с вашим приложением, а не с базой данных.

Простой способ проверить это, чтобы поместить значение в виде строки:

select round(1/100000000::decimal, 8)::text 

Это должно не возврата экспоненциальное.

+0

Вы правы, кастинг как текст возвращает значение не в экспоненциальном/научном Для отображения значения (вместо вычислений) это то, что мне нужно. Здесь обновляется демо-версия sqlfiddle: http://sqlfiddle.com/#!15/9eecb7db59d16c80417c72d1e1f4fbf1/1550 – user1221679

0

Вероятно, второй случай выходит за рамки точного диапазона 8.

Вы можете проверить этот вопрос Selecting floating point numbers in decimal form

Кроме того, какую версию вы работаете с, потому что в pgAdmin 9.2 я получить другой результат

enter image description here

+0

postgresql v9.4 .. см. Http://sqlfiddle.com/#!15/9eecb7db59d16c80417c72d1e1f4fbf1/1534 – user1221679