Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa zaokruzivanjem po bank. algoritmu?

[es] :: Pascal / Delphi / Kylix :: Problem sa zaokruzivanjem po bank. algoritmu?

[ Pregleda: 4815 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

star_x

Član broj: 80814
Poruke: 22
*.ppp-bg.sezampro.yu.



+1 Profil

icon Problem sa zaokruzivanjem po bank. algoritmu?11.01.2006. u 17:34 - pre 222 meseci
Moj problem se manifestuje u tome sto kada zelim da zaokruzim broj na odredjeni broj decimala ne mogu da ga zaokruzim na najblizu vrednost jer se zaokruzivanje vrsi na najblizu parnu vrednost.

Npr. broj 45,445 zaokruzuje na 45,44 umesto 45,45.

U kodu koristim funkciju RoundTo, a u SQL-u ROUND(x, -[brojdecimala]), obe funkcije isto zaokruzuju. Problem je jer se radi sa mnozenjem vecih vrednosti u queriju. U bazi cuvam podatke zaokruzene na dve decimale.

Probao sam sa funkcijom SetRoundMod(rmNearest) ali nisam dobio željeni rezultat.
Pomagajte jer sam u velikoj stisci s vremenom.

Hvala unapred!!!
Postoje 11 grupe ljudi ... oni koji znaju binarne brojeve, oni koji ne znaju i oni koji ponekad smisle neki glup slogan.
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Problem sa zaokruzivanjem po bank. algoritmu?11.01.2006. u 18:11 - pre 222 meseci
Koristi SimpleRoundTo.
 
Odgovor na temu

star_x

Član broj: 80814
Poruke: 22
*.ppp-bg.sezampro.yu.



+1 Profil

icon Re: Problem sa zaokruzivanjem po bank. algoritmu?11.01.2006. u 18:26 - pre 222 meseci
Hvala na pokušaju, delomično je uspelo:

Probao sam:

FloatToStr(SimpleRoundTo(123.445, -2)) i dobio 123.44 kao rezultat.

ali kada sam postavio

SetRoundMode(rmTruncate)

pre poziva funkcije, profunkcionisalo je za sve primere.

Međutim ostaje problem kako da zaokruživanje ispravno funkcioniše u sql-u upita gde se javlja isti problem sa zaokruživanjem.




[Ovu poruku je menjao star_x dana 11.01.2006. u 20:22 GMT+1]
Postoje 11 grupe ljudi ... oni koji znaju binarne brojeve, oni koji ne znaju i oni koji ponekad smisle neki glup slogan.
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Problem sa zaokruzivanjem po bank. algoritmu?11.01.2006. u 22:16 - pre 222 meseci
Ovo je Delphi forum. Za probleme sa bazom i SQL-om pitaj u forumu za rad sa bazama.
 
Odgovor na temu

ivanho
slobodni umetnik
Beograd

Član broj: 28465
Poruke: 73
*.maksnet.net.



Profil

icon Re: Problem sa zaokruzivanjem po bank. algoritmu?11.01.2006. u 22:52 - pre 222 meseci
broj 45,445 zaokruzen na dve decimale
i jeste 45,44, a ne 45,45
ukoliko je cifra ispred 5 parna broj se zaokruzuje na manje, ukoliko je neparna zaokruzuje se na vece
 
Odgovor na temu

Bojan Kopanja
Bojan Kopanja
Senior Web Developer, ZeusSoftware
Stara Pazova

Član broj: 6155
Poruke: 507
80.93.238.*

ICQ: 346697685
Sajt: www.zeussoftware.rs


Profil

icon Re: Problem sa zaokruzivanjem po bank. algoritmu?11.01.2006. u 23:58 - pre 222 meseci
Odnosno ukoliko je cifra ispred 5 parna ne dira se nista, a ako je neparna zaokruzuje se na vecu, parnu cifru .
 
Odgovor na temu

star_x

Član broj: 80814
Poruke: 22
*.smin.sezampro.yu.



+1 Profil

icon Re: Problem sa zaokruzivanjem po bank. algoritmu?12.01.2006. u 02:12 - pre 222 meseci
Našao sam rešenje!
Ako se dobro sećam pri zaokruživanju na recimo dve decimale gleda se treca i ukoliko je ona 5 ili više druga se uvecava za jedan.
A što se tiče zaokruživanja koliko ja znam postoje četiri vrste: na gore, na dole, na najbližu celobrojnu vrednost i na najbližu parnu vrednost.
Ova poslednja se valjda koristi u statistici, ...
Ispred mene je stavljen zahtev da ispoštujem treće od gore nabrojanih zaokruživanja.

Iako pomislih da SimpleRoundTo ispravno radi posao pronašao sam sledeće rezulate
na jednom sajtu, a i sam sam primetio da nije baš uvek pouzdana.

SimpleRoundTo( 2.000,0) -> 2.00
SimpleRoundTo( 1.500,0) -> 2.00
SimpleRoundTo( 1.000,0) -> 1.00
SimpleRoundTo( 0.500,0) -> 1.00
SimpleRoundTo( 0.000,0) -> 0.00
SimpleRoundTo(-0.500,0) -> 0.00
SimpleRoundTo(-1.000,0) -> 0.00
SimpleRoundTo(-1.500,0) -> -1.00
SimpleRoundTo(-2.000,0) -> -1.00
SimpleRoundTo(-8.400,0) -> -7.00

Rešenje sam našao u sledećoj funkciji ako nekome zatreba:

function RoundUp(X: Extended; D: integer): Extended;
var y, f:Extended;
begin
f:= IntPower(10, D);
y:= x*f;
y := Trunc(y) + Trunc (Frac(y) * 2);
result:= y/f;
end;

Hvala u svakom slučaju !!!


Postoje 11 grupe ljudi ... oni koji znaju binarne brojeve, oni koji ne znaju i oni koji ponekad smisle neki glup slogan.
 
Odgovor na temu

vradovanovic
Veljko Radovanović
Logik poslovna rešenja
Niš

Član broj: 56361
Poruke: 24
82.208.209.*

Sajt: www.logik.rs


Profil

icon Re: Problem sa zaokruzivanjem po bank. algoritmu?13.01.2006. u 08:50 - pre 222 meseci
Citat:
star_x: Ako se dobro sećam pri zaokruživanju na recimo dve decimale gleda se treca i ukoliko je ona 5 ili više druga se uvecava za jedan.
A što se tiče zaokruživanja koliko ja znam postoje četiri vrste: na gore, na dole, na najbližu celobrojnu vrednost i na najbližu parnu vrednost.
Ova poslednja se valjda koristi u statistici, ...


Postoji samo jedna jedina vrsta zaokruživanja: kada je poslednja cifra 5, koristi se pravilo parne cifre. I koristi se svuda: u matematici, u statistici, u knjigovodstvu, ... Ako neko zna neki primer gde se koristi neki drugi način, neka me ispravi da ne živim u zabludi

Pozdrav,

Veljko
 
Odgovor na temu

broker

Član broj: 2415
Poruke: 8514
212.62.59.*



+11 Profil

icon Re: Problem sa zaokruzivanjem po bank. algoritmu?13.01.2006. u 09:35 - pre 222 meseci
Imaju knjigovodje svoje zaokruzivanje.
 
Odgovor na temu

star_x

Član broj: 80814
Poruke: 22
*.dialup.sezampro.yu.



+1 Profil

icon Re: Problem sa zaokruzivanjem po bank. algoritmu?13.01.2006. u 16:36 - pre 222 meseci
Citat:
vradovanovic: Postoji samo jedna jedina vrsta zaokruživanja: kada je poslednja cifra 5, koristi se pravilo parne cifre.


U tom slučaju bi sledeće četiri funkcije iz Excela:

ROUNDUP
ROUNDDOWN
EVEN
ODD

kao i sledeće nabrojane iz Delphija:

setRoundMode(rmUp)
setRoundMode(rmDown)
setRoundMode(rmNearest)
setRoundMode(rmTruncate)

bile čist višak jer bi po defaultu zaokruživao po pravilu parne cifre.

Pozdrav!

[Ovu poruku je menjao star_x dana 13.01.2006. u 20:49 GMT+1]
Postoje 11 grupe ljudi ... oni koji znaju binarne brojeve, oni koji ne znaju i oni koji ponekad smisle neki glup slogan.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Problem sa zaokruzivanjem po bank. algoritmu?

[ Pregleda: 4815 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.