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

Bagaimana cara membulatkan tipe REAL ke NUMERIC?

real adalah tipe floating-point lossy dan tidak tepat. Itu hanya menggunakan 4 byte untuk penyimpanan dan tidak dapat menyimpan literal numerik yang disajikan secara tepat untuk memulai. Selain itu, detail implementasi bergantung pada platform Anda. Pertimbangkan bab "Jenis Titik Mengambang" di panduan.

Tidak ada yang salah dengan round() atau cast() . Untuk hasil yang tepat, Anda harus menggunakan numeric untuk memulai.

Audit fungsi

CREATE OR REPLACE FUNCTION test3()
  RETURNS void AS
$func$
DECLARE
   r record;
BEGIN
   FOR r IN 
      SELECT abs_km AS km
            ,cast(abs_km AS numeric) AS km_cast
            ,round(abs_km::numeric, 2) AS km_round
      FROM   gps_entry
   LOOP
      RAISE NOTICE 'km: % , km_cast: % , km_round: %'
                  , r.km, r.km_cast, r.km_round;
      INSERT INTO test (km, casting, rounding)
      VALUES (r.km, r.km_cast, r.km_round);
   END LOOP;    
END
$func$ LANGUAGE plpgsql;
  • Jangan mengutip nama bahasa plpgsql . Ini adalah pengenal.
  • Tidak masuk akal untuk membulatkan ke 2 digit pecahan setelah casting ke numeric(16,2) , yang sudah dibulatkan secara paksa. Entah - atau ..

    round(abs_km:: numeric(16,2), 2) as round
    round(abs_km::numeric, 2) as round
    abs_km::numeric(16,2) as round

Terakhir, Anda perlu meningkatkan ke versi saat ini. Postgres 8.3 telah mencapai EOL dan tidak didukung.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menyimpan gambar dalam bidang byte dalam database PostgreSQL

  2. Menampilkan gambar di Laporan menggunakan PostgreSql

  3. Bagaimana cara menggunakan UUID sebagai kunci utama untuk Hibernate Entity?

  4. Kueri Postgresql di antara rentang tanggal

  5. JDBC:Dapatkah saya berbagi koneksi di aplikasi multithreading, dan menikmati transaksi yang menyenangkan?