MySQL select :)

Karel Zak zakkr na zf.jcu.cz
Čtvrtek Červen 27 13:56:03 CEST 2002


On Thu, Jun 27, 2002 at 01:27:41PM +0200, Martin Sittek wrote:
> On 27.06.02, Novák Jiří wrote:
> > Programator se nikdy! nepokousi porovnavat dve cisla s PLOVOUCI RADOVOU 
> > CARKOU, protoze dve stejna cisla NEMUSI byt stejne representovana v pameti.
> > Lisi se pak nejakou setinkou na nejakem nevyznamnem miste, ale porovnani 
> > nesedi mozno pouzit tes abs(val1-val2)<0.0000001 atd.
> >  
> > zvolte jiny datovy typ (pro penezni castky napr typ money ) nebo se 
> > porozhlidnete po SQL funkci ktera vysledek zaokrouhli (nebo zverstvo -> 
> > prevede na retezec a porovna)
> > 
> > Stejne problemi jsou i na jinych SQL.
> > na MS SQL je treba typ money - 64-bitovy int kde posledni 4 mista se berou 
> > jako desetinna
> > 
> > pokud mate tech hodnot tak 10 000 skuste si je treba secist s ruzne 
> > nastavenym razenim a uvidite co dostanete
> 
> Tady bych si dovolil jeden skromný dotaz, o tomto _fenomenu_ :-) že 
> reálná čísla (například finanční) se ukládají v DB do typů money,
> nebo numeric/deciaml vím poměrně dlouho a chápu i důvod proč se tak
> činí. Ovšem nějak pořád nechápu, že když se s těmi čísly chce pracovat,
> tak se stejně musí převést na nějaký reálný typ (float, double) a pak

 Pokud by to tak bylo tak, aby asi nemelo cenu nejaky numeric
 vymyslet. Coz? To se na zadny realny typ neprevadi, ono by to ani
 nemuselo jit u nekterych opravdu dlouhych cisel. Napr. v PostgreSQL
 se s numeric pracuje jako s polem cislic ve stringu a pripadne
 vypocty jsou pak delany v nejakem cyklu kde se to co je treba postupne
 aplikuje na vsechna ta cisla (pekne jsem to zjednodusil, no
 matematik nejsem). Jak je to presne se muzete podivat do zdrojaku.  
 Zadny float/double tam nenajdete.
 
    Karel


-- 
 Karel Zak  <zakkr na zf.jcu.cz>
 http://home.zf.jcu.cz/~zakkr/
 
 C, PostgreSQL, PHP, WWW, http://docs.linux.cz, http://mape.jcu.cz


Další informace o konferenci Databases