Podminka If
Uživatel | Příspěvek |
Pavel Krsek Poslat zprávu | Profil |
Datum:
30.8. 2012
| Zobrazeno:
9975x Konfigurace CATIA: Text dotazu: Set oMeasurable = oSPAWB.GetMeasurable(LimitBokXZ2) hodnota YDistance je 295 a hodnota YdistanceT je take 295, presto podminka if vyhodnoti jako nepravdu a tim padem hodnota RoundYDistance je 296 - pritom ma byt stale 295. Zkousel jsem nekolikrat kontrolovat, krokovat makro, ale nechapu proc se to deje. K tomu jeste v celem makru je to same, ale misto Y s pismenem X a tam to vyhodnocuje spravne. Ma nekdo nejaky typ? Diky |
Michal Poslat zprávu | Profil |
[#3288]
| Publikováno:
30.08. 2012 - 09:56 zdravím,
jakého datového typu je proměnná YDistance a YDistanceT? Jestli porovnáváte dvě proměnné typu double můžou se lišit třeba na 13 pozici za desetinnou čárkou, pak Vám podmínka neklapne... |
Pavel Krsek Poslat zprávu | Profil |
[#3289]
| Publikováno:
30.08. 2012 - 10:34 Ano, proměnná je opravdu typu Variant/Double. Na jakou ji mam teda zkusit zmenit?
Dekuji. |
Michal Poslat zprávu | Profil |
[#3291]
| Publikováno:
30.08. 2012 - 11:14 tak záleží s jakou přesností chcete porovnávat. Jestli Vám stačí porovnávat jen celou část čísla, tak by stačilo i přetypování CLng.
Jak se to dá řešit je např. http://www.techrepublic.com/article/comparing-double-vs-single-data-types-in-vb6/5978932 |
agaragar Poslat zprávu | Profil |
[#3292]
| Publikováno:
30.08. 2012 - 11:20 Asi prebehnúť zaokruhľovaním, aby sa dostalo zhody. Zaokrúhlite to na vyhovujúcu možnú mieru povedzme na dve desatinné miesta, alebo tak nejak.
Mne sa tiež stalo, že som robil funkciu Milti-section z dvoch kružníc nad sebou: jedna priemer 19 a druhá 15. No a po zmeraní som nameral priemer 14,999987. A neviem, aký má dôvod meniť priemer, to je zase môj dotaz, že "čo si to tá dnešná CATIA už dovoľuje" :o) |
Pavel Krsek Poslat zprávu | Profil |
[#3293]
| Publikováno:
30.08. 2012 - 11:27 Diky moc Michal,
dle Vaseho odkazu stacilo zmenit promennou na typ Single a uz to funguje OK. |
Michal Poslat zprávu | Profil |
[#3294]
| Publikováno:
30.08. 2012 - 11:40 To Pavel Krsek:
omylem jsem Vás mystifikoval. chtěl jsem poslat tento odkaz http://www.vb-helper.com/howto_net_compare_float.html je to sice pro .Net, ale princip je stejný. Jde hlavně o tohle CStr(Math.Abs(A - B) < 0.00001), kde 0.00001 určuje s jakou přesností porovnáváte dva doubly. Přetypování na Single není úplně nejlepší, taky může mít desetinnou část. |
Uživatel nepřihlášen
Pro zobrazení obsahu stránky / provedení akce (vytvoření nového téma, napsání odpovědi do diskuse apod.) musíte být přihlášeni.