Salama 发表于 2022-7-5 23:30:27

用于舍入文本的Lisp例程

此lisp例程将任何整数中逗号后的十进制数字设置为2位,即使是在文本中,也可以设置为2位。如何避免出现0。。(例如:25.456~25.460、25.322~25.320)最后0不可取。。
 

Salama 发表于 2022-7-5 23:43:34

情感应该用情感代替
没有空间。

David Bethel 发表于 2022-7-5 23:50:04

调查DIMZIN sysvar-David

jvillarreal 发表于 2022-7-5 23:54:15

给你。。。我找到了一个旧代码。
似乎与我2011年Acad上的单一测试一起工作。
 
只需键入NP,输入精度并选择文字/多行文字。
 
;4-9-09
;Implements user specified precision on integers with or without text
;used getPrec by CAB
(defun c:NP (/ RtosPrec ss x Number Prec charlist n snumber numlist char strippednumber nnumber NewString)
(vl-load-com)
(setq RtosPrec (getint "Enter Precision to force on all Text and MText Integers:"))
(setq ss (ssget '((-4 . "<OR")(0 . "TEXT")(0 . "MTEXT")(-4 . "OR>"))))
(setq x 0)
(Repeat (sslength ss)
(progn
(setq Number (ssname ss x))
(defun getPrec (str)
   (if (vl-string-search "/" str)
   (setq str (vl-string-right-trim "0" (rtos (distof str) 2 ))
   )
   (if (vl-string-search "." str)
   (- (strlen str)(vl-string-search "." str) 1)
   0
   )
)
(setq Prec (getprec (cdr (assoc 1 (entget Number)))))
(setq charlist (vl-string->list (cdr (assoc 1 (entget Number)))))
(setq n 0 snumber nil)
(setq numlist (list "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"))
(repeat (length charlist)
(setq char (chr (nth n charlist)))
(if (member char numlist)
(setq snumber (append snumber (list char)))
);if
(setq n (1+ n))
);repeat
(if snumber
(progn
(setq StrippedNumber 0)
(setq n (length snumber))
(setq char 0)
(repeat (- n prec)
(setq StrippedNumber (+ StrippedNumber (* (atoi (nth char snumber))(expt 10 (1- (- n prec))))))
(setq n (1- n)
      char (1+ char)
);setq
);repeat
(setq n prec)
(setq char (length snumber))
(repeat prec
(setq StrippedNumber (+ StrippedNumber (* (atoi (nth (1- char) snumber))(expt 0.1 n))))
(setq n (1- n)
      char (1- char)
);setq
);repeat
(setq snumber (rtos strippednumber 2 prec))
(setq nnumber (rtos strippednumber 2 rtosprec))
(setq NewString
(strcat
(substr (cdr (assoc 1 (entget Number))) 1 (- (length (vl-string->list (cdr (assoc 1 (entget Number)))))(length (vl-string->list snumber))))
nnumber
)
)
(entmod (subst (cons 1 NewString)(assoc 1 (entget Number)) (entget Number)))
);progn
);if
);progn
(setq x (1+ x))
);repeat
);defun

MSasu 发表于 2022-7-6 00:03:32

Salama,请注意,在高级编辑器中(在帖子输入字段底部的Go advanced按钮),您会发现一个复选框,允许您禁用帖子中的自动表情识别。
 
 
 
此外,在发布代码摘录时,请考虑使用代码标签,而不是引用标签;这将确保保留格式。

Snownut 发表于 2022-7-6 00:07:24

萨拉马,
 
通过使用“cond”语句,可以节省大量的“setq”使用,见下面的示例;
 
修改后的代码;

(setq fixn
    (cond
      ((= remval 0)(+ fixedv 0))
      ((= remval 1)(- fixedv 1))
      ((= remval 2)(- fixedv 2))
      ((= remval 3)(- fixedv 3))
      ((= remval 4)(- fixedv 4))
      ((= remval 5)(+ fixedv 5))
      ((= remval 6)(+ fixedv 4))
      ((= remval 7)(+ fixedv 3))
      ((= remval   (+ fixedv 2))
      ((= remval 9)(+ fixedv 1))
      )
    )

 
您现有的代码;

(if (= remval 0) (setq fixn (+ fixedv 0)))
(if (= remval 1) (setq fixn (- fixedv 1)))
(if (= remval 2) (setq fixn (- fixedv 2)))
(if (= remval 3) (setq fixn (- fixedv 3)))
(if (= remval 4) (setq fixn (- fixedv 4)))
(if (= remval 5) (setq fixn (+ fixedv 5)))
(if (= remval 6) (setq fixn (+ fixedv 4)))
(if (= remval 7) (setq fixn (+ fixedv 3)))
(if (= remval 8 (setq fixn (+ fixedv 2)))
(if (= remval 9) (setq fixn (+ fixedv 1)))

pBe 发表于 2022-7-6 00:14:13


(setq fixn (eval
           (nth        remval
                '((+ fixedv 0)
                  (- fixedv 1)
                  (- fixedv 2)
                  (- fixedv 3)
                  (- fixedv 4)
                  (+ fixedv 5)
                  (+ fixedv 4)
                  (+ fixedv 3)
                  (+ fixedv 2)
                  (+ fixedv 1)
               )
           )
       )
   )

(setq fixn (eval (cadr
           (assoc remval
                '((0 (+ fixedv 0))
                  (1 (- fixedv 1))
                  (2 (- fixedv 2))
                  (3 (- fixedv 3))
                  (4 (- fixedv 4))
                  (5 (+ fixedv 5))
                  (6 (+ fixedv 4))
                  (7 (+ fixedv 3))
                  (8 (+ fixedv 2))
                  (9 (+ fixedv 1))
               )
           )
       )
   )
   )
 
你甚至可以添加
 
(if (and
   (< -1 fixedv 10)
   fixedv) (...))

Lee Mac 发表于 2022-7-6 00:18:58

或:
(if (< remval 5)
   (setq fixn (- fixedv remval))
   (setq fixn (+ fixedv (- 10 remval)))
)

pBe 发表于 2022-7-6 00:28:25

 
真正地哦,伙计,你有没有想过这个?还是你只花了一分钟就想到了?

Lee Mac 发表于 2022-7-6 00:30:57

 
谢谢pBe-我花了一些时间试图避免if语句,但5及以上的模式很容易识别,因为每种情况下两个数字的总和都是10
页: [1]
查看完整版本: 用于舍入文本的Lisp例程