正数和负数pro
我从来没有在任何其他Lisp程序的问题。如果“c”比“b”大,它会给我一个负数。不管我选哪个顺序。有人能回答为什么吗?更奇怪的是,“e”是我需要的正确数字,但它没有打印出答案。当我运行另一个类似于此的例程时,效果很好。我正在使用2011 Cada=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))))
读了这篇文章后,我想到的第一件事是:
您希望将答案列为文本,因此可能需要使用函数itos(整数到字符串)将变量e更改为文本。
目前没有AutoCAD访问权限测试它。。。 例如:
(command "text" pause "6" "0" (itos e)) 不,它仍然给我负数。 本地化变量,并可能查看abs函数。 alanjt公司
好的,这里有一个新问题。为什么我需要本地化我的变量?我正在研究和尝试腹肌。 非局部变量可能对例程产生不利影响(同一个例程第二次运行,或者不同的例程具有相同的定义变量)。
如。
(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,它每次都给出了我想要的值。 另一种解释。 您是否尝试过此处给出的值以外的值(即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 谢谢alanjt,
我以为这就是你的意思。
谢谢李,
我确实在你的网站上读过。标记您的站点。
danellis,
它在另一个图形中运行良好,因此我想知道图形中是否有更改的设置。我确实去本地化了我的变量,我将从现在开始做。
谢谢
乔伊
页:
[1]