Temat: Własna funkcja ceiling
Witam
Mam funkcje zaokrąglającą w góre do dwóch miejsc po przecinku np:
0,123 -> 0,13
0,000123 ->0,01
CREATE OR REPLACE FUNCTION "fzaokragl_w_gore" (
"liczba" double precision,
"precyzja" real = 0.01
)
RETURNS REAL AS
$body$
declare
wynik REAL := 0;
begin
wynik:= -floor(-liczba / precyzja) * precyzja;
return wynik;
end;
$body$
LANGUAGE 'plpgsql'
Wszystko było by dobrze gdyby nie to że 120 zamienia na 120,01, a ja chce żeby to było 120
Zapytanie select -floor(-120 / 0.01)*0.01
pokazuje 120 wiec doszedłem, że to przez to że funkcja zwraca real i dlatego jest 120,01
W jaki sposób to poprawic aby zwracało 120 a nie 120,01, a w 0,123 było nadal 0,13
Poprawiłem na
CREATE OR REPLACE FUNCTION "fzaokragl_w_gore" (
"liczba" double precision,
"precyzja" real = 0.01
)
RETURNS REAL AS
$body$
declare
wynik REAL := 0;
begin
if mod(cast (liczba as numeric), 1)=0 then
wynik:=liczba;
else
wynik:= -floor(-liczba / precyzja) * precyzja;
end if;
return wynik;
end;
Ale jeszcze mam pytanie, w jaki sposób zmienic precyzje zaokrąglenia no dla 0,123 pozostaje 0,01 co wynosi 0,13
ale np dla 0,9 chciałbym zaokrąglenie 1 co dawało by w wyniku 1, bo teraz daje 0,91
Pozdrawiam
AdamP.
Ostatnio edytowany przez adamleon (2011-03-09 09:51:56)