Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: Desetinné dělení

C# .NET .NET (C# a Visual Basic) Desetinné dělení American English version English version

Aktivity (1)
Avatar
rwn
Člen
Avatar
rwn: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
Luboš Satik Běhounek
Autoredaktor
Avatar
Odpovídá na rwn
Luboš Satik Běhounek: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í
+1 bodů
Řešení problému
Nahoru Odpovědět  +2 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.