Autolisp中的小数和数学
嗨,论坛。这是一个实践代码,作为参考,我在旁边有excel计算。
问题
1.autocad输出中缺少小数(“rtos或.0”用于获取我知道的小数,但不知道如何在这里实现。我得到了错误)
2.在这种情况下,计算结果不符合68岁以上的年龄。
(defun C:mathfun()
(setq intAge (getint "\n Enter Your Age : "))
(setq intdays (* intage 365))
(setq intweeks ( / intdays 7))
(setq intmonths ( / intdays 30))
(setq inthours (* intdays 24))
(setq intmins (* inthours 60))
(setq intsecs (* intmins 60))
(princ (strcat "\n You are " (itoa intdays) " Days Old!"))
(princ (strcat "\n Your are " (itoa intweeks) " Weeks Old!"))
(princ (strcat "\n Your are " (itoa intmonths) " Months Old!"))
(princ (strcat "\n Your are " (itoa inthours ) " Hours Old!"))
(princ (strcat "\n Your are " (itoa intmins ) " Minutes Old!"))
(princ (strcat "\n Your are " (itoa intsecs ) " Seconds Old!"))
(Princ)
)
非常感谢。
年龄代码。图纸 (defun C:mathfun1()
(setq intAge (getint "\n Enter Your Age : "))
(setq intdays (rtos (* intage 365.0) 2 )
(setq intweeks (rtos ( / intdays 7.0) 2 )
(setq intmonths (rtos ( / intdays 30.0) 2 )
(setq inthours(rtos (* intdays 24.0) 2 )
(setq intmins(rtos (* inthours 60.0) 2 )
(setq intsecs( rtos (* intmins 60.0) 2 )
(princ (strcat "\n You are " (itoa intdays) " Days Old!"))
(princ (strcat "\n Your are " (itoa intweeks) " Weeks Old!"))
(princ (strcat "\n Your are " (itoa intmonths) " Months Old!"))
(princ (strcat "\n Your are " (itoa inthours ) " Hours Old!"))
(princ (strcat "\n Your are " (itoa intmins ) " Minutes Old!"))
(princ (strcat "\n Your are " (itoa intsecs ) " Seconds Old!"))
(Princ)
)
我尝试使用rtos获取小数,但出现了错误。
Autocad命令行
命令:MATHFUN1
输入您的年龄:68岁
; 错误:错误的参数类型:numberp:“24820.00000000”
命令: 看看这个:
(/ 6 3) => 2
(/ 7 3) => 2
(/ 7.0 3) => 2.33333
(/ 7 3.0) => 2.33333
(float 3) => 3.0
考虑用于每个表达式的数据类型:
rtos将数值转换为字符串。
itoa将整数转换为字符串。
算术计算中只能使用数值(请考虑intdays变量是字符串)。
从计算中删除rtos表达式,并在strcat表达式中用rtos替换itoa。 考虑以下因素:
(defun c:mathfun ( / age day )
(initget 6)
(if (setq age (getint "\nEnter your age: "))
(princ
(strcat "\nYou are: "
"\n" (itoa (setq day (* age 365))) " days old."
"\n" (rtos (/ day7.0) 2) " weeks old."
"\n" (rtos (/ day 30.0) 2) " months old."
"\n" (itoa (* day 24)) " hours old."
"\n" (itoa (* day 24 60)) " minutes old."
"\n" (itoa (* day 24 60 60)) " seconds old."
)
)
)
(princ)
) 哎呀,无视我之前的帖子。我没有正确阅读OP。 Yuo可能还想研究(rtos)转换的sysvar DIMZIN 李有点搞笑(*365岁。有事)要考虑闰年。
22645.5或22630
李先生,非常感谢你给我展示了如何把事情做好
我将查找更多示例,以研究itoa和rtos
抱歉,出现了另一个问题,请在年龄超过68岁后查看所附图像。在autolisp中,年龄(秒)的输出错误,它们变为负值,并且是错误的值。 当然,大卫·贝瑟尔。谢谢你的指导。
页:
[1]
2