PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

PostgreSQL - pembulatan angka floating point

Coba

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

bekerja dengan semua versi PostgreSQL.

Ada kekurangan kelebihan dalam beberapa fungsi PostgreSQL, mengapa (???):Saya pikir "ini adalah kekurangan", dan di bawah ini menunjukkan solusi saya, tetapi lihat diskusi ini untuk penjelasan lebih lanjut .

Overloading sebagai strategi casting

Anda dapat membebani berlebihan fungsi ROUND dengan,

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

Sekarang instruksi Anda akan berfungsi dengan baik, coba (setelah pembuatan fungsi)

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

tetapi ia mengembalikan tipe NUMERIC... Untuk mempertahankan kelebihan penggunaan umum pertama, kita dapat mengembalikan float ketika parameter teks ditawarkan,

 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;

Coba

 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:Anda dapat memeriksa kelebihan muatan dengan \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                                              

Fungsi pg_catalog adalah fungsi default, lihat manual matematika bawaan fungsi .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memudahkan Mengelola Basis Data PostgreSQL Produksi

  2. Postgres menemukan semua baris dalam tabel database yang cocok dengan kriteria pada kolom tertentu

  3. Perintah meta di Psycopg2 - \d tidak berfungsi

  4. Bergabunglah dengan dua tabel berdasarkan stempel waktu terdekat

  5. Nonaktifkan pembungkus dalam output Psql