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

Cudno ponasanje decimalnih brojeva

[es] :: Firebird/Interbase :: Cudno ponasanje decimalnih brojeva

[ Pregleda: 3962 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Brkic

Član broj: 55360
Poruke: 1222
*.dynamic.sbb.co.yu.



Profil

icon Cudno ponasanje decimalnih brojeva31.10.2007. u 09:31 - pre 200 meseci
u tabeli imam kolonu PROCENAT tipa decimal,probao sam da bude i float i double precision,real ali nista ne pomaze.

kada izvrsim upis u tabelu sa inser into ... u procenat se upise broj koji treba ali bez , -znaci umesto 1,23 on upise 123

kada rucno u procenat upisem 1,23 on ga takvog i snimi i sve je OK
ili ako upisem preko q.fieldbyname('procenat').asstring :=pom; gde je pom izracunata vrednost procenta isto bude OK.

Kako da resim problem sa insert into ???
jel neko imao takvih problema ??
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

Član broj: 72468
Poruke: 1155
*.dialup.neobee.net.



Profil

icon Re: Cudno ponasanje decimalnih brojeva31.10.2007. u 10:04 - pre 200 meseci
Citat:

Da li si atribut deklarisao sa:
1) decimal
2) decimal(16,2)?

Umesto toga, hteo sam napisati, da li si atribut probao deklarisati:
1)DOUBLE PRECISION
2)NUMERIC(n,m)

Izvinjavam se.

Ako imaš polje u tabeli deklarisano kao NUMERIC(n,m), a uneseš 123, Firebird će taj broj upisati kao 123,m, a m predstavlja broj iza decimalnog zareza. Ako uneseš 1,23, te m ima vrednost, npr., 4, onda će Firebird tu vrednost evidentirati kao 1,2300.

[Ovu poruku je menjao Miloš Baić dana 31.10.2007. u 12:00 GMT+1]
Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

savkic
Igor Savkić

Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Cudno ponasanje decimalnih brojeva31.10.2007. u 10:11 - pre 200 meseci
> tabeli imam kolonu PROCENAT tipa decimal,probao sam da bude i float i double precision,real ali nista ne pomaze.

NUMERIC se uglavnom preferira u odnosu na DECIMAL.

> kada izvrsim upis u tabelu sa inser into ... u procenat se upise broj koji treba ali bez , -znaci umesto 1,23 on upise 123
> kada rucno u procenat upisem 1,23 on ga takvog i snimi i sve je OK

Pokaži tačnu definiciju tabele i kompletnu insert naredbu.
 
Odgovor na temu

dogriz
Sombor

Član broj: 29744
Poruke: 259
89.216.227.*

Sajt: dogriz.blogspot.com


+6 Profil

icon Re: Cudno ponasanje decimalnih brojeva31.10.2007. u 10:17 - pre 200 meseci
Hajde da se nadovežem na ovu temu - da li je neko primetio da DoublePrecision zna da pravi grešku?
Npr. upišem broj 3 u bazu, a on bude snimljen kao 2,9999999 i sl.
To mi se dešavalo sa FB1.5 i nekim bazama gde mi je bilo potrebno upisivanje velikog broj decimala... U FB2.0 nisam ni probao kako ovo radi, jer sam morao problem da rešim na drugi način.
 
Odgovor na temu

Brkic

Član broj: 55360
Poruke: 1222
*.dynamic.sbb.co.yu.



Profil

icon Re: Cudno ponasanje decimalnih brojeva31.10.2007. u 11:12 - pre 200 meseci
@Miloš Baić probao sam i decimal(16,2) ali nista

CREATE TABLE promene(id int NOT NULL,ime Char(35),br1 int,br2 int,procenat numeric) CONSTRAINT PK_promene PRIMARY KEY (id))
iz tabele izcitava podatke i upisuje u promene
pom8:=floattostr((br2*100)/br1)-100); onda svojom funkciom broj smanjim na 2 decimale
insert into promene (id,ime,br1,br2,,procenat) values('+QuotedStr(pom)+','+QuotedStr(q3.fieldbyname('ime').asstring)+','+QuotedStr(q3.fieldbyname('br1').asstring)+',
'+QuotedStr(q3.fieldbyname('br2').asstring)+','+QuotedStr(pom8)+')');

sve se dobro upise sem procenta bez " , "
kada posebno proverim pom8 i QuotedStr(pom8) daju rezultat 1,23 ali upise u tabelu 123

kada PROCENAT stavim da bude char onda sve lepo radi bez greske,ali tada ne mogu da vrsim sortiranje PROCENTA po ascendind i descending
 
Odgovor na temu

dogriz
Sombor

Član broj: 29744
Poruke: 259
89.216.227.*

Sajt: dogriz.blogspot.com


+6 Profil

icon Re: Cudno ponasanje decimalnih brojeva31.10.2007. u 12:36 - pre 200 meseci
Mislim da ti je problem u onom ",". Pokušaj da umesto QuotedStr(pom8) upišeš QuotedStr('1.23') za probu. Ako prođe, problem je u DecimalSeparator-u, kog ćeš morati da prebaciš iz "," u "."
 
Odgovor na temu

savkic
Igor Savkić

Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Cudno ponasanje decimalnih brojeva31.10.2007. u 13:01 - pre 200 meseci
> kada posebno proverim pom8 i QuotedStr(pom8) daju rezultat 1,23 ali upise u tabelu 123
> kada PROCENAT stavim da bude char onda sve lepo radi bez greske,ali tada ne mogu da vrsim sortiranje PROCENTA po ascendind i descending

Ti si polje PROCENAT zapravo deklarisao kao integer koji ne dozvoljava realne brojeve. Ako hoćeš realne onda ga moraš deklarisati sa odgovarajućim precisionom i scalom (npr NUMERIC(15,3)), pogledaj uputstvo za detalje i objašnjenja.
 
Odgovor na temu

savkic
Igor Savkić

Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Cudno ponasanje decimalnih brojeva31.10.2007. u 13:10 - pre 200 meseci
> Hajde da se nadovežem na ovu temu - da li je neko primetio da DoublePrecision zna da pravi grešku?
> Npr. upišem broj 3 u bazu, a on bude snimljen kao 2,9999999 i sl.
> To mi se dešavalo sa FB1.5 i nekim bazama gde mi je bilo potrebno upisivanje velikog broj decimala...

Nije to vezano za FB, već za način kako funkcioniše sistem za rad sa pokretnim zarezom, nemoguće je precizno predstaviti sve brojeve pa se koristi aproksimacija, ista je stvar i u Delphiu. Npr ako deklarišeš promenljivu tipa double i upišeš 3 on se zapravo čuva kao 2,999 (pa veliki broj devetki). Kada se takva vrednost preuzme iz baze u klijent programu trebalo bi da se dobije 3. Ako si ti direktno to polje iz baze castovao u char onda se doista dobija takav rezultat, ali ako prethodno castuješ u numeric pa u char onda bi trebalo da bude dobro.
 
Odgovor na temu

Brkic

Član broj: 55360
Poruke: 1222
*.dynamic.sbb.co.yu.



Profil

icon Re: Cudno ponasanje decimalnih brojeva31.10.2007. u 13:35 - pre 200 meseci
Resen proble,problem je u . i ,
ulaznim decimalnim brojevima se , mora prebaciti u . i onda u tabeli pise sa ,
ako je ulazni dec broj sa , onda u tabeli nema ni . ni ,

Mozda nekom zatreba.
hvala svima na pomoci.
 
Odgovor na temu

schild
Dejan Šild
TopCode Software
Subotica

Član broj: 59888
Poruke: 138
*.legendww.com.

Sajt: www.topcode.rs


+2 Profil

icon Re: Cudno ponasanje decimalnih brojeva01.11.2007. u 08:40 - pre 200 meseci
Citat:
Brkic: Resen proble,problem je u . i ,
ulaznim decimalnim brojevima se , mora prebaciti u . i onda u tabeli pise sa ,
ako je ulazni dec broj sa , onda u tabeli nema ni . ni ,

Da, to sam i ja primetio.
Recimo: CAST('110,1' as DOUBLE PRECISION) ce vratiti 1101 !?

Da li je to bug, ili ima neke logike u tome?
 
Odgovor na temu

savkic
Igor Savkić

Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Cudno ponasanje decimalnih brojeva01.11.2007. u 08:51 - pre 200 meseci
> Recimo: CAST('110,1' as DOUBLE PRECISION) ce vratiti 1101 !?
> Da li je to bug, ili ima neke logike u tome?

Nije bug, ',' je separator hiljada a '.' decimalni separator.
 
Odgovor na temu

schild
Dejan Šild
TopCode Software
Subotica

Član broj: 59888
Poruke: 138
*.legendww.com.

Sajt: www.topcode.rs


+2 Profil

icon Re: Cudno ponasanje decimalnih brojeva01.11.2007. u 09:55 - pre 200 meseci
Citat:
savkic: > Recimo: CAST('110,1' as DOUBLE PRECISION) ce vratiti 1101 !?
> Da li je to bug, ili ima neke logike u tome?

Nije bug, ',' je separator hiljada a '.' decimalni separator.
Pa jeste, ali onda bi se moglo očekivati i da vrati 110100?
Mislim, tako je kako je, bitno je da znamo kako funkcioniše.
 
Odgovor na temu

savkic
Igor Savkić

Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Cudno ponasanje decimalnih brojeva01.11.2007. u 20:03 - pre 200 meseci
> Pa jeste, ali onda bi se moglo očekivati i da vrati 110100?

Otkud ti to, vrlo je jednostavno, prilikom konverzije izbaci sve separatore hiljada na koje naiđe i šta ostane je krajnji broj. Da li je separator ispravno postavljen ili ne se ne gleda.
 
Odgovor na temu

Brkic

Član broj: 55360
Poruke: 1222
*.dynamic.sbb.co.yu.



Profil

icon Re: Cudno ponasanje decimalnih brojeva15.11.2007. u 22:21 - pre 199 meseci
kako da definisem promenljivu da bude broj ali da moze da je zapamti kao 10,00 ?? Sve koje sam probao pamte samo 10 dok na svakom fiskalnom racunu ima 10,00

kada u Alatu pogledam zapise budu 10,00 ali ih u tabeli ispisuje samo 10

[Ovu poruku je menjao Brkic dana 16.11.2007. u 00:02 GMT+1]
 
Odgovor na temu

schild
Dejan Šild
TopCode Software
Subotica

Član broj: 59888
Poruke: 138
*.legendww.com.

Sajt: www.topcode.rs


+2 Profil

icon Re: Cudno ponasanje decimalnih brojeva16.11.2007. u 11:05 - pre 199 meseci
Citat:
Brkic: kako da definisem promenljivu da bude broj ali da moze da je zapamti kao 10,00 ?? Sve koje sam probao pamte samo 10 dok na svakom fiskalnom racunu ima 10,00
kada u Alatu pogledam zapise budu 10,00 ali ih u tabeli ispisuje samo 10
Koji ti je to moćni, o Alat? Kombinerke?
 
Odgovor na temu

savkic
Igor Savkić

Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Cudno ponasanje decimalnih brojeva16.11.2007. u 21:15 - pre 199 meseci
> kako da definisem promenljivu da bude broj ali da moze da je zapamti kao 10,00 ?? Sve koje sam probao pamte samo 10 dok na svakom
> fiskalnom racunu ima 10,00

Tebi treba formatiranja brojeva za prikaz u klijent programu, to nema veze sa bazom. Ako koristiš Delphi onda je to DisplayFormat svojstvo.
 
Odgovor na temu

Brkic

Član broj: 55360
Poruke: 1222
*.dynamic.sbb.co.yu.



Profil

icon Re: Cudno ponasanje decimalnih brojeva17.11.2007. u 07:14 - pre 199 meseci
>schild malo ozbijnosti

1. nisu 'Kombinerke' vec 'kombinirke'
2. a ni jedno ni drugo nego 'kombinovana klesta'
cisto da znas da se ne brukas

inace alat je IBOConsole i IB Expert

hvala savkicu na odgovoru,probacu.
 
Odgovor na temu

[es] :: Firebird/Interbase :: Cudno ponasanje decimalnih brojeva

[ Pregleda: 3962 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

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