Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
autocad2012

[Yêu cầu] Lisp làm tròn số TEXT

Các bài được khuyến nghị

Mới bị xóa nên làm lại cái topic mới ^^

 

Ví dụ em có 1 số như thế này: 90.58

Em muốn chỉnh hàng loạt những số tương tự như thế này thành:

90 (bỏ luôn cả dấu chấm)

90.0

90.00

 

Mình có thể chỉnh được số chữ số 0 phía sau dấu chấm hoặc có thể bỏ luôn.

 

Cảm ơn mọi người đã giúp đỡ.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Lisp tùy chọn số chữ số 0 sau dấu chấm thập phân:

;Doan Van Ha - CADViet.com - Ngay 17/11/2012
;Chuc nang: Tuy chon so chu so 0 sau dau cham.
(defun C:HA( / txt)
(or (and *stp* (= (type *stp*) 'INT)) (setq *stp* 0))
(setq stp (getint (strcat "\nSo chu so thap phan sau dau cham <" (itoa *stp*) ">: ")))
(if (not stp) (setq stp *stp*) (setq *stp* stp))
(while (setq ss (ssget '((0 . "TEXT,MTEXT"))))
 (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
  (if (setq txt (distof (cdr (assoc 1 (entget ent)))))
   (entmod (subst (cons 1 (rtos (fix txt) 2 stp)) (assoc 1 (entget ent)) (entget ent))))))
(princ))

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Thank bác Doan Van Ha.

Chỉnh sửa giùm mình chút nữa ko bạn.

Ví dụ 90.58

Mình muốn làm tròn số lên 91 luôn

hoặc nếu 1 số thập phân thì nó thành: 90.6

 

Thanks bác

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Lần sau nhớ xác định rõ mục đích và yêu cầu của bạn trước khi nhờ người khác giúp nhá....

; Write by avi612
(defun C:LTT( / ss n i oldDimzin e d v S)

 (defun etype (e) ;;;Entity Type
(cdr (assoc 0 (entget e)))
 )

(if (not n0) (setq n0 2))
(setq
ss (ssget '((0 . "TEXT,MTEXT")))
n (getint (strcat "\nS\U+1ED1 ch\U+1EEF s\U+1ED1 th\U+1EADp phân: <" (itoa n0) ">"))
i 0
oldDimzin (getvar "dimzin")
)
(if n (setq n0 n) (setq n n0))
(setvar "dimzin" 1)
(repeat (sslength ss)
(setq e (ssname ss i))
(if (= (etype e) "MTEXT") (progn
   	(command "explode" e "")
   	(setq e (entlast))
))
(setq
   	d (entget e)
   	v (atof (cdr (assoc 1 d)))
   	S (rtos v 2 n)
   	d (subst (cons 1 S) (assoc 1 d) d)
)
(entmod d)
(setq i (1+ i))
)
(setvar "dimzin" oldDimzin)
(princ)
)

  • Vote tăng 4

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mới bị xóa nên làm lại cái topic mới ^^

 

Ví dụ em có 1 số như thế này: 90.58

Em muốn chỉnh hàng loạt những số tương tự như thế này thành:

90 (bỏ luôn cả dấu chấm)

90.0

90.00

 

Mình có thể chỉnh được số chữ số 0 phía sau dấu chấm hoặc có thể bỏ luôn.

 

Cảm ơn mọi người đã giúp đỡ.

Hoằn cũng được vinh dự vào thùng rác, cùng chung ngửi mùi hôi với chủ thớt!

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

<p>Theo như các yêu cầu của bạn thì cách làm tròn là khác nhau, tương đương với 3 hàm trong MS Excel:<br />

- Hàm Round: Làm tròn thông thường với số lẻ tùy ý, ví dụ: Round(9.16,1)    -> 9.2; Round(7.61,1)    -> 7.6; Round (7.61,0) -> 8.<br />

- Hàm Ceiling: Làm tròn trên với bước tùy ý,               ví dụ: Ceiling(9.16,0.1) -> 9.2; Ceiling(7.61,0.1) -> 7.7; Ceiling (7.61,1) -> 8.<br />

- Hàm Floor: Làm tròn dưới với bước tùy ý,                 ví dụ: Floor  (9.16,0.1) -> 9.1; Floor  (7.61,0.1)  -> 7.6; Floor   (7.61,1) -> 7.</p>

<p> </p>

<p>Ngoài ra, các hàm này còn cho phép nhập đối số âm. Ví dụ Round(123456,-3)->123000.</p>

<p>Như vậy, bạn cần 3 hàm xử lý khác nhau tùy theo yêu cầu, có thể gộp chung trong 1 lisp hoặc tách riêng từng hàm một.</p>

<p> </p>

<p>Hehe, yêu cầu thì như vậy, nhờ bác nào upgrade các lisp ở trên.</p>

<p> </p>

<p>P/s: Nên bổ sung tính năng lọc số trước khi làm tròn, nghĩa là nếu nó là số thì làm tròn, không là số thì bỏ qua.</p>

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ai giúp sửa lisp này thành lisp làm tròn lên với. VD: 90.1 --> 91; 90.6 --> 91; 91.05 --> 92

Đây là cách dùng cho số >=0, nếu muốn cho số âm. bạn tự sửa

(defun RoundUp (x)(+ (fix x) (if (> (rem x 1) 0) 1 0)))

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

He, làm được rồi. Rất cám ơn bạn đã giúp!

Đây là cách dùng cho số >=0, nếu muốn cho số âm. bạn tự sửa

(defun RoundUp (x)(+ (fix x) (if (> (rem x 1) 0) 1 0)))

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vào lúc 5/1/2014 tại 23:17, BuiHuuNghia đã nói:

He, làm được rồi. Rất cám ơn bạn đã giúp!

Đây là cách dùng cho số >=0, nếu muốn cho số âm. bạn tự sửa

(efun RoundUp (x)(+ (fix x) (if (> (rem x 1) 0) 1 0)))d

Làm như thế nào đấy bạn? cho mình xin cái bạn lisp bạn chỉnh lại được ko?

 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay
Đăng nhập để thực hiện theo  

×