j_spawn_h 发表于 2022-7-6 08:42:36

正数和负数pro

我从来没有在任何其他Lisp程序的问题。如果“c”比“b”大,它会给我一个负数。不管我选哪个顺序。有人能回答为什么吗?更奇怪的是,“e”是我需要的正确数字,但它没有打印出答案。当我运行另一个类似于此的例程时,效果很好。我正在使用2011 Cad
 
a=20
b=40’-5.25”
c=45’-10”
d=1852
e=37040
但它给了我-28496,并把它放在屏幕上,而不是37040,这是我正在寻找的。
 

(defun c:sr ()

(setq a (getstring "16/20 for wind: "))
(setq b (getdist "\nClick on 2 points to specify mean roof height: "))
(setq c (getdist "\nClick on 2 points to specify building length: "))
(setq d (fix (* (cvunit c "INCHES" "FEET") (cvunit b "INCHES" "FEET"))))

    (if (= a "20")   
    (progn   
   (setq e (* 20 d))
      (command "text" pause "6" "0" e)
   (princ)))
   (if (= a "16")   
    (progn   
   (setq e (* 16 d))
       (command "text" pause "6" "0" e)

   (princ))))

LibertyOne 发表于 2022-7-6 08:53:29

读了这篇文章后,我想到的第一件事是:
您希望将答案列为文本,因此可能需要使用函数itos(整数到字符串)将变量e更改为文本。
 
目前没有AutoCAD访问权限测试它。。。

LibertyOne 发表于 2022-7-6 09:00:46

例如:
(command "text" pause "6" "0" (itos e))

j_spawn_h 发表于 2022-7-6 09:02:41

不,它仍然给我负数。

alanjt 发表于 2022-7-6 09:13:57

本地化变量,并可能查看abs函数。

j_spawn_h 发表于 2022-7-6 09:22:20

alanjt公司
好的,这里有一个新问题。为什么我需要本地化我的变量?我正在研究和尝试腹肌。

alanjt 发表于 2022-7-6 09:29:00

非局部变量可能对例程产生不利影响(同一个例程第二次运行,或者不同的例程具有相同的定义变量)。
 
如。
(defun c:TEst (/)
(if (setq n (getint "\nSpecify value to append to list: "))
   (print (setq l (cons n l)))
)
(princ)
)

(defun c:TEst2 (/ n l)
(if (setq n (getint "\nSpecify value to append to list: "))
   (print (setq l (cons n l)))
)
(princ)
)
 
 
Command: test

Specify value to append to list: 5

(5)

Command:
Command:
TEST
Specify value to append to list: 25

(25 5)

Command:
Command: test2

Specify value to append to list: 4

(4)

Command:
Command:
TEST2
Specify value to append to list: 56

(56)
 
注意,当我执行第一个例程测试时,当我键入第一个值时,它会将其附加到列表中,但下次我运行例程并将值附加到列表中时,它也有我在第一次运行时键入的第一个值。然而,对于第二个例程Test2,它每次都给出了我想要的值。

Lee Mac 发表于 2022-7-6 09:35:38

另一种解释。

danellis 发表于 2022-7-6 09:37:51

您是否尝试过此处给出的值以外的值(即b=40 c=35’)?它们如何影响结果?
 
我怀疑在解释你在b和c的距离值时有些问题。单位转换后的数据看起来如何?作为一个测试例程,我可能会尝试以下内容:
(defun c:sr2 ( / A B C D E Z Y X W)

(SETQ
a "20";(GETSTRING "16/20 for wind: ")
b 485.25;(GETDIST "\nClick on 2 points to specify mean roof height: ")
c 550;(GETDIST "\nClick on 2 points to specify building length: ")
z (CVUNIT c "INCHES" "FEET")
y (CVUNIT b "INCHES" "FEET")
);SETQ

(PRINC "\nMean Roof Height:    ")
(PRINC y)
(PRINC "\NBuilding Length:    ")
(PRINC z)

(SETQ x (* z y))
(PRINC "\nfirst multiplication:   ")
(PRINC x)

(SETQ d (FIX x))
(PRINC "\nAfter rounding: ")
(PRINC d)

    (if (= a "20")   
    (progn   
   (setq e (* 20 d))
      (command "text" pause "6" "0" e)
   (princ)))
   (if (= a "16")   
    (progn   
   (setq e (* 16 d))
       (command "text" pause "6" "0" e)

   (princ)
   );PROGN
   );IF
);DEFUN
 
注意,我已经本地化了我的变量,正如本线程中其他地方提到的那样,以至少避免这种可能性。
 
有趣的是,这给了我37060的结果,而不是你预测的37040。
 
希望这些能有所帮助,
 
dJE

j_spawn_h 发表于 2022-7-6 09:43:40

谢谢alanjt,
我以为这就是你的意思。
 
谢谢李,
我确实在你的网站上读过。标记您的站点。
 
danellis,
它在另一个图形中运行良好,因此我想知道图形中是否有更改的设置。我确实去本地化了我的变量,我将从现在开始做。
 
谢谢
乔伊
页: [1]
查看完整版本: 正数和负数pro