Je chyba ve Vb6, v mém pc anebo ve mně?
Mám dvě proměnné, obě jsou typu single. Ale na mé požadavky odpovídá program naprosto nelogicky:
Print tpBody(ip).od
7
Print SiB
7
If (tpBody(ip).od = SiB) then Print "7 = 7" Else Print "7 <> 7"
7 <> 7
If (tpBody(ip).od < SiB) then Print "7 < 7"
If (tpBody(ip).od > SiB) then Print "7 > 7"
7 > 7
Jsem zoufalýýýý :)
Fórum › Visual Basic
Kupecké počty
Proměnná single má plovoucí řádovou čárku a sedmička (uložená v paměti) nemusí být sedmička ale např. 6.99999999999. Ovšem příkaz Print vytiskne 7.
K tomu dochází zejména tehdy, jdyž číslo v proměnné single vznikne výpočtem.
Podle toho, že Váš test If (tpBody(ip).od > SiB) then Print "7 > 7" je pravdivý, by to tak mohlo být (jedno z čísel není sedmička).
Zkuste vytisknout pomocí Format, abyste program donutil zobrazit čísla za desetinnou tečkou.
Print Format(tpBody(ip).od, 00.000000000)
Print Format(SiB, 00.000000000)
Já teda sice ve VB nedělám, ale obecně porovnávat desetinné čísla na rovnost je blbost. Obvykle se to dělá tak, že se vezme absolutni hodnota jejich rozdílu a porovná se, zda je menši než nějaký tebou určený etalon.Příklad:
A = 7.0;
B = 6.8;
C = B+0.2;
ABS(A-C) < 0.001 then ....
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Jednoduché kupecké počky pomocí dynamických objektů — založil psychofanator
Jednoduche pocty — založil Hlavinka
Počty-dotazy — založil xjx
Pocty podgrafu grafu — založil sorce
Adresářový strom s počty souborů — založil VelkyBubak
Moderátoři diskuze