Zobrazit plnou verzi příspěvku: LISP zaokruhlenie

Acid3P
04.07.2011, 14:02
Dobry den!Vie neikto z vas o LISPe, ktory by vedel zaokruhlit text na zadany pocet miest? Pouzivam PK soft tools s prikazom TT, ktora oreze pozadovany pocet znakov zo zaciatku alebo konca textu, ale ja by som potreboval, aj spominane zaokruhlovanie. Skusal som hladat aj cez google, ale zatial som pozadovany lisp nenasiel.

PepaR
04.07.2011, 14:04
Dobrý den,nepomohlo by následující téma? 

Mantlík
04.07.2011, 14:50


Dřív se při programování zaokrouhlovalo tak, ře se k poslednímu potřebnému řádu přičetla jeho polovina Takže např. při zaokrouhlování na dvě desetinná místa se přičítalo 0,005 a pak se to za 2. desetinným místem odřízlo, např.  12,144 + 0,005 = 12,149 -> po odříznutí je 12,1412,145 + 0,005 = 12,150 -> po odříznutí je 12,1512,149 + 0,005 = 12,154 -> po odříznutí je 12,15asi by to šlo implementovat do toho lispu TT, před "ořezávací" řádek dát něco, jako(setq a (+ 0.005 a)) (možná má i lisp něco pro zaokrouhlování, tak zběhlý zase nejsem)

Mantlík
04.07.2011, 16:05


A úplně jsem zapomněl, že rovnou zaokrouhluje i funkce pro převod čísla na text (rtos number [mode [precision]]) kde "precision" je požadovaná přesnosta "mode" je pro desetinná čísla 2

DodoSVK
03.08.2011, 10:59
Prosim Vas kam treba dany script doplnit do scriptu TRIM TEXT, aby okrem orezavania sa dalo nastavit aj to zaokruhlovanie....
 
dakujem
 
; *** TRIM TEXT v0.8.0 ***(defun C:TT ( / n ptxt ntxt pref suf mtxt); define number of start cut (initget 4) (setq pref (getint "\nWrite number of start cut <0>: ")) (if (null pref) (setq pref 0)); define sufix (initget 4) (setq suf (getint "\nWrite number of end cut <0>: ")) (if (null suf) (setq suf 0)) (if (and (eq pref 0) (eq suf 0))  (princ "\nNo changes... End command.")  (progn   (setq ptxt 0)   (while (/= ptxt nil)    (princ "\nSelect (m)text to edit... [press enter for end command]")    (setq ptxt (ssget '(      (-4 . "<OR")       (0 . "TEXT")       (0 . "MTEXT")      (-4 . "OR>")    )))    (if (/= ptxt nil)     (progn      (setq n 0)      (repeat (sslength ptxt)       (setq ntxt (cdr (assoc 1 (entget (ssname ptxt n))))); test length of trim       (if (< (strlen ntxt) (+ pref suf))        (alert "\nLength of start + end cut is longer, as length of the text.")        (if (eq (strlen ntxt) (+ pref suf))         (progn          (if (null del)           (progn            (initget "Yes No")            (setq del (getkword "\nLength of start + end cut is equal as length of the text. Do you want delete text entit? <Yes>/No: "))            (if (null del) (setq del "Yes"))           )          )          (if (eq del "Yes")           (entdel (ssname ptxt n))          )         )         (progn          (setq ntxt (substr ntxt (1+ pref) (- (strlen ntxt) (+ pref suf))))          (setq mtxt (subst (cons 1 ntxt) (assoc 1 (entget (ssname ptxt n))) (entget (ssname ptxt n))))          (entmod mtxt)         )        )       )       (setq n (1+ n))      )     )     (princ "\nEnd command.")    )   )  ) ) (princ))

Vladimír Michl
03.08.2011, 11:39
Ten kód se na zaokrouhlování moc nehodí - zkuste RoundT na stránce Download, narychlo spíchnuto.
 


(Neošetřuje desetinnou čárku)

DodoSVK
03.08.2011, 12:11
funguje vyborne len tu ciarku by to chcelo este  neako zapracovat, neviem ci je to zlozite..
 
lebo takto hrozi velke riziko ze pride ku chybe, ked by som tymto prikazom  upravoval viacej cisel, a mal by som omylom medzi nimi jedno z ciarkou...
 
2.555 => 2.56
2,555 => 2.00
 
uz len tazko by si potom vsimol ze doslo ku takejto hrubej chybe .To uz by bolo lepsie keby tie s ciarkou odignorovalo a nechalo trojmiestne....Nedoslo by tak ku chybe, v pripade ze omylom dam zaokruhlit cislo s ciarkou.
 
Ak je to otazka par klikov tak by som Vas poprosil este ten script upravit.
 
Dakujem.

Vladimír Michl
03.08.2011, 15:34
Aktualizovaná verze RoundT teď zaokrouhluje jen čistá čísla a ošetřuje možné chyby. Řeší (a zachovává) i desetinnou čárku. Zadáním záporného počtu deset.míst jde vynutit zobrazování koncových nul.
 
Viz Download

Acid3P
05.08.2011, 09:39
funguje to vyborne, plni to presne funkciu, ktoru som hladal. Dakujem!