请编程师们指点一下
刚刚开始学习,我自己写了一点程式,但在运行时出了点问题,当字符串转换成实数时小数点的位数发生变化了,本来是2位数结果变成了1位数,而且数值也变了,成了四舍五入了,我想小数点后面仍保留2位,数值也不要发生任何变化,我该怎么做?请编程师们指点迷津!程式如下:(setq bb(getpoint))(setq qq(nth 0 bb))
(setq qq1(substr (rtos qq) 6 2))
(setq qq2(substr (rtos qq) 1 5))
(setq a ".")
(setq n (strcat qq2 a qq1))
(distof n)
运行结果如下:(setq bb(getpoint))
(setq qq(nth 0 bb))
(setq qq1(substr (rtos qq) 6 2))
(setq qq2(substr (rtos qq) 1 5))
(setq a ".")
(setq n (strcat qq2 a qq1))
(distof n)
(3.61222e+008 1.62138e+008 0.0)
3.61222e+008
"16"
"36122"
"."
"36122.16"
36122.2
正确值应该是36122.16而转换后的值变成了36122.2 ?
(rtos qq)改成(rtos qq 2 2) (setq bb (getpoint))
(setq qq (car bb))
(setq n (rtos qq 2 2))
(princ "\n")
(princ n)
ZZXXQQ :还是不行啊!您的程式和我的思路不太相同,我的意思是假如点取的坐标值是39578617.123那么我要将这个值变为39578.61(前面要5位数,然后是小数点,后面在保留2为小数)
我运行了(rtos qq)改成(rtos qq 2 2)
结果还是$ (setq bb(getpoint))
(setq qq(nth 0 bb))
(setq qq1(substr (rtos qq 2 2) 6 2))
(setq qq2(substr (rtos qq 2 2) 1 5))
(setq a ".")
(setq n (strcat qq2 a qq1))
(distof n)
(3.61222e+008 1.62138e+008 0.0)
3.61222e+008
"16"
"36122"
"."
"36122.16"
36122.2
请问如何将"36122.16"转变为36122.16而不是36122.2
本帖最后由 Andyhon 于 2011-6-27 17:13 编辑
坐标值是39578617.123那么我要将这个
值变为39578.61 ...
(setq bb (getpoint))
(setq qq (/ (car bb) 1000))
(setq qq2 (substr (rtos qq) 1 8))
点取坐标点后返回值是(3.95893e+007 4.15075e+006 0.0),并不是实数啊? 建议上传您的图文件(*.dwg)
依实例来探讨,可排除不同工作环境设定的岐义 实在不好意思,出差了这么久,刚刚回来,现在把图上传,图中圆心部分的端点坐标,在vlisp当中返回的坐标值是(setq bb (getpoint))
(setq qq (/ (car bb) 1000)
(setq qq2 (substr (rtos qq) 1 8))
(3.95851e+007 4.1443e+006 0.0) Command: !bb
(3.95851e+007 4.1443e+006 0.0) ; Scientific
Command: (rtos (car bb) 2 16)
"39585059.60300001"
Command: (rtos (cadr bb) 2 16)
"4144296.106000000"
Ref: LUnits的帮助