Vítejte !   Přihlášení | Registrace
Hlavní menu
CATIA fórum.cz
Novinky
Seriál CATIA
Obecně o CAD
Novinky ze světa DS
Makra pro CATIA V5
Diskuse
Vytvořit téma
Koncepty
Seznam oblíbených
Soukromé zprávy
Pravidla
Live CHAT
VIP žádost
Základy Catia
Ke stažení
Doporučujeme
Pracovní příležitosti
Reklama a kampaně
O fóru
Nápověda

Podminka If

UživatelPříspěvek
Pavel Krsek

Poslat zprávu | Profil
Datum: 30.8. 2012 | Zobrazeno: 9975x
Konfigurace CATIA:

Text dotazu:
Ahoj,
stalo se Vam nekdy neco podobneho? Mam tuto cast scriptu:

Set oMeasurable = oSPAWB.GetMeasurable(LimitBokXZ2)

YDistance = oMeasurable.GetMinimumDistance(LimitBokXZ)
YDistanceT = Int(YDistance)
If YDistance = YDistanceT Then
RoundYDistance = Int(YDistance)
Else
RoundYDistance = Int(YDistance + 1)
End If


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.