<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - Własna funkcja ceiling]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=558&amp;type=atom"/>
	<updated>2011-03-09T07:54:50Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=558</id>
		<entry>
			<title type="html"><![CDATA[Odp: Własna funkcja ceiling]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2429#p2429"/>
			<content type="html"><![CDATA[Wiem, że dziwne, ale takie cosik jest mi potrzebne. Jest taka funkcja w excelu zaokr.gora(a,b) która tak działa
Swoją lekko już ją poprawiłem w pierwszej wiadomości]]></content>
			<author>
				<name><![CDATA[adamleon]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=873</uri>
			</author>
			<updated>2011-03-09T07:54:50Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2429#p2429</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Własna funkcja ceiling]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2428#p2428"/>
			<content type="html"><![CDATA[A co to za zaokraglenie
0,000123 ->0,01
?

Jak to ma niby działać?]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2011-03-09T07:51:28Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2428#p2428</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Własna funkcja ceiling]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2427#p2427"/>
			<content type="html"><![CDATA[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.]]></content>
			<author>
				<name><![CDATA[adamleon]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=873</uri>
			</author>
			<updated>2011-03-09T06:54:38Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2427#p2427</id>
		</entry>
</feed>
