Zobrazit plnou verzi příspěvku: Lisp - zaokrouhlování funkce RTOS

Mantlík
12.04.2005, 13:16
Dobrý den
U jedné rutiny v lispu jsem potřeboval použít funkci rtos. A teď nevím, jestli tato funkce zároveň na zadaný počet míst zaokrouhluje, nebo jen ořezává. Z kontrolních výpočtů mi připadá, že někdy to zaokrouhluje a jindy ořezává.
Víte nekdo, jaká je tedy správná funkce (nikde jsem to nenašel)
Díky 

Vladimír Michl
12.04.2005, 13:52
(rtos) zaokrouhluje - jen pozor, v závislosti na DIMZIN též ořezává nevýznamné nuly - viz Help nebo:http://www.cadforum.cz/cadforum/qaID.asp?tip=1671

Mantlík
11.05.2005, 10:51
Dobrý den
 
Ještě jednou se vrátím k funkci rtos. Idea" ukážu na bod a na patřičná místa se napíšou souřadnice x, y (y 10x zmenšené) . Problémy jsou u souřadnice y
výsek kódu"
(setq pt (getpoint "\nUkaž vrchol polygonu: "))(setq x (abs(car pt)))(setq y (abs(cadr pt))).
.
(setq y3(/ y 10))
(setq y1 (rtos y3 2 2))
.
.
následuje vložení hodnot
 
Problém spočívá v tom, že pokud např. y= 2400, vloží se hodnota 240.01 místo 240.00 (nebo 240 ). Kontrola proměnných !y3 = 240.005 a !y1 = "240.01"
ale pokud na příkazovém řádku zadám
(setq y3(/ y 10))   -> vyjde správně 240.00(setq y1 (rtos y3 2 2))  -> vyjde správně "240.00"
Jak je tohle možné ? Přitom nikde jinde se tyhle lokální proměnné v rutině nevyskytují a nepomůže ani jejich přejmenování
 
Děkuji za rady
 

pavlacka
11.05.2005, 16:13
Zkontrolujte promennou !pt.
roman pavlacka

Mantlík
11.05.2005, 16:30
To bylo samozřejmě to první, co jsem zkontroloval

Kubeczka
11.05.2005, 16:47
Zdravím. Vyzkoušel jsem zadat souřadnici y jako celé číslo (např 2402). V tomto případě funkce (setq y3(/ y 10))  vypočítá y3=240. Pokud y bude reálné číslo, pak y3=240.2. Nevím, nač to potřebujete. Pokud chcete zaokrouhlovat, tak si vytvořte jednoduchou rutinku, kterou použijete na každý vstup getpoint.

Kubeczka
11.05.2005, 16:54
Jakou to má plnit funkci a jaký výstup potřebujete? Mohu se o něco pokusit.

pavlacka
11.05.2005, 17:14
Ja bych postupoval vylucovaci metodou (je mozne i trasovat a sledovat chovani promennych).
Zkusil jsem si jen tu cast, kterou jste zverejnil a funguje mi korektne (dokonce jsem vybiral body podobne tomu vasemu).
Muzete zkusit  prerusit program v miste pred prikazem (setq y3 (/ y 10)) a potom ho zapsat na prikazovou radku a zkontrolovat !y.
roman pavlacka

Mantlík
11.05.2005, 18:29
 Heuréka ! záhada je vyřešena !
Chyba samozřejmě není v programu, ale ve mně.
Nejlépe použít moudrou větu pánů Š+G "A jakpak dělá kozička, pane inženýre ?")
Měl jsem totiž na disku dvě verze. Na starou, rozpracovanou, opuštěnou (a zapomenutou na disku) s pokusem o zaokrouhlování přitom vedla cesta v autocadu, zatímco k té novější, z níž byl výsek kódu cesta nevedla.
A tak se samozřejmě pořád načítala verze stará. No nic ..
 
Děkuji všem, kteří se ozvali s radou nebo doplňujícími dotazy