Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 9 odgovora
  • 6.143 pregleda

Najnovija ↓

Problem sa zaokruzivanjem po bank. algoritmu? 11.01.2006. u 18:34 · pre 253 meseca #1
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!!!
Potpis
Postoje 11 grupe ljudi ... oni koji znaju binarne brojeve, oni koji ne znaju i oni koji ponekad smisle neki glup slogan.
Re: Problem sa zaokruzivanjem po bank. algoritmu? 11.01.2006. u 19:26 · pre 253 meseca
izmenjeno 1 put, poslednji put star_x 11.01.2006. u 20:22
  1. star_x11.01.2006. u 20:22zapis iz teksta poruke
#3
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.
Potpis
Postoje 11 grupe ljudi ... oni koji znaju binarne brojeve, oni koji ne znaju i oni koji ponekad smisle neki glup slogan.
Re: Problem sa zaokruzivanjem po bank. algoritmu? 11.01.2006. u 23:52 · pre 253 meseca #5
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
Re: Problem sa zaokruzivanjem po bank. algoritmu? 12.01.2006. u 03:12 · pre 253 meseca #7
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 !!!

Potpis
Postoje 11 grupe ljudi ... oni koji znaju binarne brojeve, oni koji ne znaju i oni koji ponekad smisle neki glup slogan.
Re: Problem sa zaokruzivanjem po bank. algoritmu? 13.01.2006. u 09:50 · pre 253 meseca #8
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
Potpis
Program za knjigovodstvo | Program za maloprodaju
Re: Problem sa zaokruzivanjem po bank. algoritmu? 13.01.2006. u 17:36 · pre 253 meseca
izmenjeno 1 put, poslednji put star_x 13.01.2006. u 20:49
  1. star_x13.01.2006. u 20:49zapis iz teksta poruke
#10
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!
Potpis
Postoje 11 grupe ljudi ... oni koji znaju binarne brojeve, oni koji ne znaju i oni koji ponekad smisle neki glup slogan.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme