[ kordoba @ 15.08.2006. 16:40 ] @
Tabela:
CREATE TABLE TR_M_UVOZ_S (
NABAVNA_CENA NUMERIC12_3,
MARZA FLOAT DEFAULT 0.0,
VP_CENA DOUBLE PRECISION DEFAULT 0.0,
PREVOZ1 DEC12_2,
CARINA FLOAT,
VAL_KURS DEC12_2,
PREVOZ2 DEC12_2,
SPEDICIJA DEC12_2,
OSTALI_TROSKOVI DEC12_2,
VREDNOST_FAKTURE DEC12_2,
);
Kod formiranja vp-cene na uvoznoj kalkulaciji javlja mi se greska
arithmetic exception,numeric overflow,or string truncation
formula je
vp_cena=(1+carina/100)*(1+Marza/100)*nabavna_cena*(VAl_kurs+(PREVOZ1+Prevoz2+spedicijA+ostali_trosak)/VREDNOST_FAKTURE) )

Pretpostavljam da je problem sa uvecanjem rezultata usled mnogo decimalnih brojeva.
Savet, iskustva!!!
[ delalt @ 15.08.2006. 19:52 ] @
Citat:
kordoba: formula je
vp_cena=(1+carina/100)*(1+Marza/100)*nabavna_cena*(VAl_kurs+(PREVOZ1+Prevoz2+spedicijA+ostali_trosak)/VREDNOST_FAKTURE) )

Ne znam da li je greška u kucanju, ali imaš jednu zagradu viška.
Grešku ćeš najlakše sam naći, formulu totalno skrati po dijelovima,
npr. ostavi samo prvi dio (1+carina/100) pa probaj da li izbaci grešku.
Postepeno dodaj ostale dijelove pa ćeš vidjeti gdje puca.
[ kordoba @ 16.08.2006. 09:55 ] @
TEST PODACI:
INSERT INTO tR_M_UVOZ_S
(NABAVNA_CENA, MARZA, VP_CENA, CARINA,vrednost_fakture,val_kurs,prevoz1,prevoz2,spedicija,ostali_troskovi)
VALUES (8.3 , 7.9 , 0 , 3 , 92214.86 ,87.1605 ,75843 , 8718 ,7091.20 ,2130);
[ dogriz @ 16.08.2006. 12:06 ] @
Pokusaj kod svih decimalnih brojeva da stavis i decimale, znaci ako je iznos 0 ti stavi 0.0 itd.
[ franjo_tahi @ 17.08.2006. 11:03 ] @
Nisi svim field-ovima dao DEFAOUT 0.
Provjeri da nije u nekom NUL.
[ mbabuskov @ 20.08.2006. 13:55 ] @
Citat:
kordoba:
vp_cena=(1+carina/100)*(1+Marza/100)*nabavna_cena*(VAl_kurs+(PREVOZ1+Prevoz2+spedicijA+ostali_trosak)/VREDNOST_FAKTURE) )


Mozda ti je VREDNOST_FAKTURE iz nekog razloga nula, a deljenje za nulom nije definisano. Takodje, moze da ti bude problem i ovo 12_2. Nisi napisao definiciju tog domena, ali pretpostavljam da je decimal(12,2). To moze da bude nedovoljno, bolje uvek koristiti maksimalnih 18,2 za cene/iznose. Trece, float ne treba ni slucajno koristiti za finansijske stvari jer ima mali kapacitet i velike greske kod zaokruzivanja. Ako vec ne zelis da fiksiras broj decimala, onda koristi DOUBLE PRECISION.

Ovakvi problemi se najlakse resavaju tako sto iz upita izbacujes jednu po jednu stvar i nadjes u cemu je problem, ali ukupno gledajuci najverovatnije da ti je FLOAT nedovoljno velik.

Osim ovoga, obrati paznju i sto su ti drugi napisali. Recimo, ako je carina 99 din:

(1+99/100) = 1

jer su integeri u pitanju. Ja uvek stavljam *0.01 umesto /100 bas ih tih razloga.
[ kordoba @ 23.08.2006. 13:11 ] @
Resio sam preblem.
Problem je u sabiranju integera i floata.
Kada sam stavio (1.0+(marza/100) i slicno sve je profunkcionisalo.
Hvala na savetima i predlozima.