Autor Zpráva
ja.cz
Profil *
Ahoj,
tak už jsem tady zas :) a stále se více méně zabývám teorií než řešením praktických příkladů. Momentálně mi nejde do hlavy, jak je myšleno, že datový typ DECIMAL je také nazýván jako „přesná desetinná čísla“. Zkoušel jsem ukládat do tabulky čísla s periodickým rozvojem a MySQL s nimi pracuje úplně stejně jako kdyby to byl datový typ DOUBLE či FLOAT.
Můžete mi prosím vysvětlit označení „přesná desetinná čísla“.
Zdroj http://www.linuxsoft.cz/article.php?id_article=768
Děkuji.
Alphard
Profil
ja.cz:
Zkoušel jsem ukládat do tabulky čísla s periodickým rozvojem a MySQL s nimi pracuje úplně stejně jako kdyby to byl datový typ DOUBLE či FLOAT.
Popište metodu zkušení.

Decimal ukládá přesná čísla až do rozsahu nastaveného při definici sloupce.

V manuálu je vše popsané.
_es
Profil
ja.cz:
Můžete mi prosím vysvětlit označení ‚přesná desetinná čísla‘.
Znamená to, že sa napríklad číslo 0.3 uloží v takom tvare, že to bude presne 0.3.
Typ double alebo float toto číslo presne uložiť nedokáže, nejaký popis je napríklad tu.
ja.cz
Profil *
[#2] Alphard
Aha, metoda zkoušení... :) to bude veselé...
Jelikož ve článku, na který jsem zde umístil odkaz, jsou popisovány "chyby" při zaokrouhlování, tak jsem ukládat do tabulky čísla s periodickým rozvojem. SQL dotazem jsem do tabulky uložil výsledek dělení 1:3. Očekával jsem, že se bude pak číslo chovat třeba jako 1/3 (jedna třetina) a ne jako 0,3333... Nevím jak jiak je teda myšleno, že se odstraní chyby při zaokrouhlování.

Kouknu na odkazy, které jste mi nasali a pak se ozvu.
Díky a dobrou... :)
ja.cz
Profil *
Chlapi, to jsem z toho srna :)
Prošel jsem si odkazy, které jste mi sem vložili a stále nevím nevím... A pořádně ani nevím jak se zeptat. Asi bych potřeboval nějaký praktický příklad jak si to otestovat abych to pochopil. Nebo mi to můžete nějak vlastními slovy vysvětlit?

V manuálu se poukazuje na to, jak DOUBLE a FLOAT nešikovně zaokrouhlí velké číslo, ale stejně tak ho nešikovně zaokrouhlí i DECIMAL. Proto nechápu v čem je jeho výhoda. Jistě že tam nějaká výhoda je, ale já ji momentálně nevidím :(

A ten příklad (#4) co jsem zkoušel já je chybně z jakého důvodu?

_es
Znamená to, že sa napríklad číslo 0.3 uloží v takom tvare, že to bude presne 0.3.
Jak to myslíš?
_es
Profil
ja.cz:
V manuálu se poukazuje na to, jak DOUBLE a FLOAT nešikovně zaokrouhlí velké číslo, ale stejně tak ho nešikovně zaokrouhlí i DECIMAL. Proto nechápu v čem je jeho výhoda. Jistě že tam nějaká výhoda je, ale já ji momentálně nevidím :(
Nejde o zaokrúhľovanie len veľkých čísel, ale o zaokrúhľovanie všetkých čísel.
0.5 uložíš presne aj v double aj v decimal.
0.3 uložíš presne v decimal no nie v double.
1/3 neuložíš presne ani vo formáte double, ani vo formáte decimal.

Jak to myslíš?
Tak ako som to napísal.
Vo formáte decimal sa to uloží ako číslo 0,3.
Vo formáte double sa to uloží ako číslo 0,010011001100110011001100110011001100110011001100110011 v dvojkovej sústave, čo nie je 0,3.
xmark
Profil
ja.cz:
Klíčové slovo je "dvojková soustava".
Číslo, které má v desítkové soustavě třeba dvě desetinná místa, jich může mít ve dvojkové mnohem víc - nebo dokonce může mít nekonečný desetinný rozvoj.
Double je určen pro celá čísla v nějakém rozsahu, nejsem si vědom, že by nějak zaokrouhloval.
Float uchovává čísla s určitý počtem platných číslic pro mantisu a zvlášť má exponent. Takže pojme největší rozsah čísel, ale prostě je zaokrouhluje.
Decimal se podle mě interně zpracovává jako dvě celá čísla. Takže pokud je nadefinován jako (3,2), nemá problém uchovat přesně dekadické číslo ve tvaru 999.99 bez nectností, které by vyplývaly z toho, převodu DEC>BIN, který jsem naznačil v druhé větě.

(opravte mě někdo, jestli se pletu)
_es
Profil
xmark:
Číslo, které má v desítkové soustavě třeba dvě desetinná místa, jich může mít ve dvojkové mnohem víc - nebo dokonce může mít nekonečný desetinný rozvoj.
To platí pre všetky číselné sústavy, môže byť aj sústava trojková, či iná, s podobným dôsledkom.

Double je určen pro celá čísla v nějakém rozsahu, nejsem si vědom, že by nějak zaokrouhloval.
Nie, double je formát čísiel s pohyblivou čiarkou teda aj veľmi malé aj veľmi veľké čísla.
Tak, ako nedokáže presne uložiť niektoré necelé čísla, tak isto nedokáže presne uložiť ani niektoré veľmi veľké celé čísla.
Formát len pre celé čísla je v programovacích jazykoch obvykle označovaný ako int alebo integer.

Float uchovává čísla s určitý počtem platných číslic pro mantisu a zvlášť má exponent.
To platí aj pre formát double, len formát double má väčší rozsah a menšiu chybu - používa viac bitov.
xmark
Profil
_es:
To platí pre všetky číselné sústavy
Ano.

A dík za informace o double. Nepoužívám ho, měl jsem ho spíš za "opravdu velký integer" a on je to "opravdu velký float".
ja.cz
Profil *
[#6] _es
aaa, tak teď už mi to dává smysl. Takovouto informaci jsem potřeboval polopatě získat. Takže DOUBLE a FLOAT ukládaji čísla "vnitřně" v binárním tvaru. No tak to je pak jasné, co tu vlastně celou dobu řeším :)
Opravdu díky za toto vysvetlení, už podruhé jsi mi ochotně to v této diskuzi vysvětlil můj dotaz!
Aď se ti daří.
Díky!
_es
Profil
xmark:
A dík za informace o double. Nepoužívám ho

Si si tým istý?
Napríklad JavaScript používa formát double na všetky čísla, aj celé. A aj v iných programovacích jazykoch je formát double používaný ako formát "reálnych" čísel.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: