2013-06-06 4 views
1

SELECT 9/2 дает 4получить точный результат для чисел деления

Почему дает автоматически округляется PostgreSQL результата?

Есть несколько вариантов предотвращения этого? (То есть мне нужно, чтобы после деления, если результат равен float, возвращает точно и не округленный результат).

UPDATE:

, например, из функции, мне нужно вернуть плавающий номер

 CREATE OR REPLACE FUNCTION division_test (arg1 INTEGER, arg2 INTEGER,) RETURNS NUMERIC 
     AS $$ 
      BEGIN 
      RETURN arg1/arg2; 
      END; 
     $$ 
     LANGUAGE plpgsql; 

SELECT division_test (9,2)

результат: 4

Как решить эту проблему?

ответ

4

Не пробовав, поможет SELECT 9.0/2.0?

В качестве ответа на вопрос: отредактированной

Would изменяя тип данных в аргументе помощи?

 CREATE OR REPLACE FUNCTION division_test (arg1 REAL, arg2 REAL) RETURNS REAL 
     AS $$ 
      BEGIN 
      RETURN arg1/arg2; 
      END; 
     $$ 
     LANGUAGE plpgsql; 

Или в зависимости от вашей требуемой точности, вы можете также использовать NUMERIC или другой фитинг numeric type.

+0

Пожалуйста, смотрите обновленный вопрос. Что делать в этом случае? – RIKI

+1

@OTARIKI: поскольку оба входных аргумента являются целыми числами, результат также будет отлит к целому числу, что даст вам «округленный» результат. При изменении типа входного параметра на «реальный» результат деления также является «реальным». –

+0

@ a_horse_with_no_name --- Спасибо. – RIKI

1

Один вариант умножить или разделить на 1.0, результат будет десятичным.

psql (9.4.5) 
Type "help" for help. 

tabd=# select 1/10; 
---------- 
    0 (1 row) 

tabd=# select 1.0 * 1/10;  
------------------------ 
0.10000000000000000000 (1 row) 
Смежные вопросы