지금 쓰는 길이리습인데
소수점 올림하던데 소수점 둘째자리까지 나타낼려면 어떻게 해야하나요?
;;—————————————————————————
;; 선택된 선의 길이를 준비된 텍스트에 써준다.[명령어:w1] (최종수정:2006.08.25)
;;—————————————————————————
(defun c:w1 (/ scal obj entname len pad ead d a radius ent lst txt txt_len i ii match f_len ntxt fst cap ntxt)
;선택된 선분의 길이를 추출
(setvar “cmdecho” 0)
;dimscale 값을 읽어들인다.
(setq scal (getvar “dimscale”))
(setq obj (entget (car (entsel “n >>길이를 구하고픈 객체를 선택하삼.”))))
;객체의 이름을 추출한다.
(setq entname (cdr (assoc 0 obj)))
;객체가 ‘LINE’이면…
(cond ((= entname “LINE”)
(setq len (distance (cdr (assoc 10 obj)) (cdr(assoc 11 obj)))))
);end of cond
;객체가 ‘ARC’이면…
(cond ((= entname “ARC”)
(progn
(setq pad (cdr (assoc 50 obj)) ead (cdr (assoc 51 obj)))
(if (> pad ead) (setq ead (+ ead 6.28319)))
(setq d (* (cdr (assoc 40 obj)) 2)
a (* (/ (- ead pad) pi) 180.0))
(setq len (* (/ (* d pi) 360) a)));end of progn
)
);end of cond
;객체가 ‘CIRCLE’이면…
(cond ((= entname “CIRCLE”)
(progn
(setq radius (cdr (assoc 40 obj)))
(setq len (* (* radius 2) pi)));end of progn
)
);end of cond
(setq lht (rtos len 2 0))
;;추출된 선분의 길이를 임의의 텍스트에 써준다.
(setq ent (entsel “n >>값을 넣을 문자를 선택하삼.”))
(setq lst (entget (car ent)))
(setq txt (cdr (assoc 1 lst)))
(setq txt_len (strlen txt))
;txt중에 숫자가 시작되는 위치를 파악
(setq i 1 ii 0 match 0) ;글자가 1개인 경우를 위해 ii를 돌린다.
(while (and (or (< match 48) (> match 57)) (<= ii txt_len))
(setq match (ascii (substr txt i 1)))
(setq i (1+ i))
(setq ii (1+ ii))
);end of while
;문자의 갯수
(setq f_len (1- ii))
;문자가 없다면
(if (= f_len 0)
(setq ntxt lht)
(progn
(setq cap (substr txt 1 f_len))
(setq ntxt (strcat cap lht))
);end of progn
);end of if
(entmod (subst (cons 1 ntxt) (assoc 1 lst) lst))
(princ)
);end of defun
(setq lht (rtos len 2 2)) ;;=> 0 을 2 로 수정