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

Jak zaokrąglić typ REAL do NUMERYCZNEGO?

real jest stratnym, niedokładnym typem zmiennoprzecinkowym. Używa tylko 4 bajtów do przechowywania i nie może dokładnie przechowywać prezentowanych literałów numerycznych. Ponadto szczegóły implementacji zależą od Twojej platformy. Rozważ rozdział „Typy zmiennoprzecinkowe” w instrukcja.

Nie ma nic złego w round() lub cast() . Aby uzyskać dokładne wyniki, musisz użyć numeric na początek.

Audyt funkcji

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;
  • Nie cytuj nazwy języka plpgsql . To identyfikator.
  • Nie ma sensu zaokrąglać do 2 cyfr ułamkowych po rzutowanie na numeric(16,2) , który na siłę już zaokrągla. Albo - albo ..

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

Na koniec musisz uaktualnić do aktualnej wersji. Postgres 8.3 osiągnął EOL i nie jest obsługiwany.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL last_value ignoruje wartości null

  2. Mieszanie poziomów izolacji w PostgreSQL

  3. Jak mogę wysłać żądanie http z funkcji lub wyzwalacza postgresql?

  4. Funkcja plpgsql:Zwróć wiersze z widoku utworzonego z tabeli losowej

  5. Jak w Postgresie ograniczyć możliwe wartości dla określonej kolumny?