Diskuze: Desetinné dělení

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

Avatar
rwn
Člen
Avatar
rwn:

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 rwn
Luboš Běhounek (Satik):

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
:)
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.