PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

PostgreSQL - закръгляване на числа с плаваща запетая

Опитайте

SELECT round((1/3.)::numeric,4);

работи с всяка версия на PostgreSQL.

Има липса на претоварвания в някои функции на PostgreSQL, защо (???):Мисля, че „това е липса“ и по-долу показвам моето решение, но вижте тази дискусия за повече обяснения .

Претоварването като стратегия за кастинг

Можете да претоварвате функцията ROUND с,

 CREATE FUNCTION ROUND(float,int) RETURNS NUMERIC AS $$
    SELECT ROUND($1::numeric,$2);
 $$ language SQL IMMUTABLE;

Сега вашата инструкция ще работи добре, опитайте (след създаване на функция)

 SELECT round(1/3.,4); -- 0.3333 numeric

но връща тип NUMERIC... За да запазим първото претоварване при общо използване, можем да върнем float, когато се предлага текстов параметър,

 CREATE FUNCTION ROUND(float, text, int DEFAULT 0) 
 RETURNS FLOAT AS $$
    SELECT CASE WHEN $2='dec'
                THEN ROUND($1::numeric,$3)::float
                -- ... WHEN $2='hex' THEN ... WHEN $2='bin' THEN... 
                ELSE 'NaN'::float  -- is like a error message 
            END;
 $$ language SQL IMMUTABLE;

Опитайте

 SELECT round(1/3.,'dec',4);   -- 0.3333 float!
 SELECT round(2.8+1/3.,'dec',1); -- 3.1 float!
 SELECT round(2.8+1/3.,'dec'::text); -- need to cast string? pg bug 

PS:Можете да проверите претоварването от \df,

 \df round
  Schema    | Name  | Datatype of result        |    Datatype of parameters                       
 -----------+-------+---------------------------+--------------------------------
 myschema   | round | numeric                   | double precision, integer                                     
 myschema   | round | double precision          | double precision, text, integer
 pg_catalog | round | double precision          | double precision                                              
 pg_catalog | round | numeric                   | numeric                                                       
 pg_catalog | round | numeric                   | numeric, integer                                              

Функциите pg_catalog са по подразбиране, вижте ръководство за вградена математика функции .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Причинено от:org.postgresql.util.PSQLException:ФАТАЛНО:неуспешно удостоверяване на паролата за потребителски администратор

  2. Запазете изхода от sql функция в csv файл (COPY) с динамично име на файл

  3. Изберете странни знаци в текста, не работи с оператор LIKE

  4. Как да намерите първите безплатни начални часове от резервации в Postgres

  5. 'синтактична грешка в края на въвеждането' - при опит за стартиране на съхранена процедура от DB