Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
rawen
Člen
Avatar
rawen:9.6.2015 23:15

Zdravím, narazil jsem na takovou jednu prkotinu. Uvedu nějaký zjednodušený příklad:

double a = 308.1;
double b = a / 10;

Proč, když provedu takovéto dělení, tak se mě do proměnné b uloží hodnota 30.810000000000002 a ne 30.81? :) Jako chápu, že je to nepřesností v typu double, ale dá se s tím něco jednoduše udělat? Jediné co mě tak napadlo je převést ono a na decimal a pak zConvertovat, ale říkám si, jestli to nejde řešit nějak "chytřeji". :) ..to, že se to dělí deseti je jen příklad..

Odpovědět
9.6.2015 23:15
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
Odpovídá na rawen
Luboš Běhounek Satik:10.6.2015 11:38

Je to kvůli tomu, že float/double čísla jsou uložena v logaritmickém tvaru o základu 2, takže některá i třeba celá čísla v tom logaritmickém zápisu mají periodu, což vede k nepřesnostem.

Decimal má tu výhodu, že číslo ukládá v logaritmickém tvaru o základu 10, takže jakékoliv neperiodické číslo v desítkovém tvaru, co do něj nacpeš, je uloženo v desítkovém tvaru a nedochází tam k zaokrouhlovací chybě už při ukládání čísla.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
10.6.2015 11:38
https://www.facebook.com/peasantsandcastles/
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.