Mám ten pocit, že se doporučovalo při porovnávání dvou čísel použít nějakou odchylku, v tomto případě pravděpodobně nějak takhle:
def float_is_less(a, b, odchylka = 0.0000001): return a < (b - odchylka) Ještě poznámka: problém není s desetinnými čísly v Pythonu ale obecně s desetinnými čísly na počítačích. Základní formát desetinných čísel není "absolutně přesný", protože někdy není možné uložit desetinné číslo úplně přesně kvůli převodu do dvojkové soustavy (může vycházet perioda, kterou počítač musí zaokrouhlit). Pokud člověk potřebuje dostat hodnotu, kterou očekává, je lepší použít celočíselný typ reprezentující např. procenta nebo jiné zlomky celku. 2009/5/6 MICHÁLEK Jan Mgr. <[email protected]>:
P.S.: Když použiju math.fabs, tak to dělá to samé. ________________________________ From: [email protected] [mailto:[email protected]] On Behalf Of MICHÁLEK Jan Mgr. Sent: Wednesday, May 06, 2009 6:28 PM To: [email protected] Subject: [python] Porovnávání v py 0.2<0.2 True???? omlouvám se za předchozí prázdný email, omylem jsem to odeslal prázdné Řeším následující problém: Zpracovávám dotazy z db (MS SQL) a potřebuji vybrat ze dvou čísel to, které je bližší k cílové hodnotě, v podmínce mám následující výraz (abs(fv-tp)<abs(tv-tp)) fv i tv jsou 0.2, přesto mi to vrací True, fv je suma ze dvou záznamů. tv jen z jednoho. Pamatuju si, že jsem v nějakém článku našel popis problému s desetinými čísly v pythonu a byl tam i popis řešení, ale nemůžu to dohledat. když použiju: print repr(abs(fv-tp)),repr(abs(tv-tp)) tak mi to vrátí: 0.019999999999999907 0.020000000000000018 nechci použít zaokrouhlování, co s tím můžu udělat? Děkuji Jelen __________ Informace od ESET NOD32 Antivirus, verze databaze 4056 (20090506) __________ Tuto zpravu proveril ESET NOD32 Antivirus. http://www.eset.cz __________ Informace od ESET NOD32 Antivirus, verze databaze 4056 (20090506) __________ Tuto zpravu proveril ESET NOD32 Antivirus. http://www.eset.cz __________ Informace od ESET NOD32 Antivirus, verze databaze 4056 (20090506) __________ Tuto zpravu proveril ESET NOD32 Antivirus. http://www.eset.cz _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
