PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

PostgreSQL - zaokrąglanie liczb zmiennoprzecinkowych

Wypróbuj

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

działa z każdą wersją PostgreSQL.

W niektórych funkcjach PostgreSQL brakuje przeciążeń, dlaczego (???):Myślę, że "to jest brak", a poniżej pokazuje moje obejście, ale zobacz ta dyskusja zawiera więcej wyjaśnień .

Przeciążanie jako strategia przesyłania

Możesz przeciążać funkcja ZAOKR z,

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

Teraz Twoja instrukcja będzie działać poprawnie, spróbuj (po utworzeniu funkcji)

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

ale zwraca typ NUMERIC... Aby zachować pierwsze przeciążenie użycia przecinka, możemy zwrócić liczbę zmiennoprzecinkową, gdy oferowany jest parametr tekstowy,

 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;

Wypróbuj

 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:Przeciążenie można sprawdzić za pomocą \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                                              

Funkcje pg_catalog są domyślnymi, zobacz instrukcję wbudowanej matematyki funkcje .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres:liczba całkowita poza zakresem

  2. PostgreSQL ORDER BY wartości w klauzuli IN()

  3. Jak połączyć kontener aplikacji webowej Docker z kontenerem Docker PostgreSQL?

  4. Uwierzytelnij użytkownika i hasło PostgreSQL bez bazy danych

  5. Jak wstawić takie rzeczy jak now() -interval '2 minutes' do zapytania PHP PDO?