Procedura zaokrąglająca liczby zgodnie z matematyczną zasadą dla bazy danych PostgreSQL

Problem z zaokrągleniami kwot jest dość powszechny i kłopotliwy. Dlatego jeśli korzystamy w bazy danych PostgreSQL to możemy się posłużyć poniższą funkcją, która zaokrągli liczby zgodnie z tym jak nauczyliśmy się szkole. Jeśli chcesz dokładniej poznać sposób obliczania kwot na fakturach to zapraszam do artykułu.

Poniższa funkcja została sprawdzona w bazie danych PostgreSQL w wersji 8.3.13 i została ona napisana w plpsql-u.

CREATE OR REPLACE FUNCTION my_round( IN nb numeric, IN rd integer ) RETURNS numeric AS $$
DECLARE
BEGIN
    return ( round( round( ( (nb)::numeric * power( 10, rd + 1 ) )::numeric, 0 ), -1 ) / power( 10, rd + 1 ) )::numeric;
END;
$$ LANGUAGE 'plpgsql';

Przykładowe wywołanie procedury

SELECT my_round( 180.84 * 1.22, 2 );

Zwróci wynik poprawny 220.63 zamiast 220.62, który zwraca domyślny round z zaokrągleniem do drugiego miejscapo przecinku.