PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm thế nào để làm tròn loại REAL thành SỐ?

real là một loại dấu phẩy động mất mát, không chính xác. Nó chỉ sử dụng 4 byte để lưu trữ và không thể lưu trữ các ký tự số được trình bày một cách chính xác để bắt đầu. Ngoài ra, chi tiết triển khai phụ thuộc vào nền tảng của bạn. Hãy xem xét chương "Các loại dấu chấm động" trong hướng dẫn sử dụng.

Không có gì sai với round() hoặc cast() . Để có kết quả chính xác, bạn phải sử dụng numeric để bắt đầu.

Kiểm tra chức năng

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;
  • Không trích dẫn tên ngôn ngữ plpgsql . Đó là một số nhận dạng.
  • Không có ý nghĩa gì khi làm tròn thành 2 chữ số thập phân sau truyền sang numeric(16,2) , vòng cưỡng bức đã có. Hoặc - hoặc ..

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

Cuối cùng, bạn cần nâng cấp lên phiên bản hiện tại. Postgres 8.3 đã đạt đến EOL và không được hỗ trợ.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lấy cây cha mẹ + con cái với lời hứa pg

  2. Duy trì UUID trong PostgreSQL bằng JPA

  3. Tại sao chỉ một siêu người dùng mới có thể TẠO MỞ RỘNG hstore mà không phải trên Heroku?

  4. Ngày thành mili giây / mili giây cho đến nay

  5. Rails:FATAL - Xác thực ngang hàng không thành công cho người dùng (PG ::Lỗi)