zhpxxx 发表于 2007-11-13 23:12:00

请问一个关于计算的白痴问题 T-T

<p>我刚刚接触autolisp,不要笑我……</p><p>为什么(setq jieguo (/ 1 2))</p><p>的结果是 0 啊??</p><p>郁闷郁闷,我用CAD2004,望各位老大帮忙指点迷津~</p>

ZZXXQQ 发表于 2007-11-14 07:56:00

(SETQ JIEGUO (/ 1 2.0))

zhpxxx 发表于 2007-11-14 10:58:00

<p><font face="Verdana">对不起我没有把情况说清楚~</font></p><p>谢谢<font face="Verdana" color="#da2549"><strong>ZZXXQQ&nbsp; </strong><font color="#000000">!</font></font></p><p><font face="Verdana">我再举个例子:</font></p><p><font face="Verdana">(setq a (getint "请输入矩形长边长:"))</font></p><p><font face="Verdana">(setq&nbsp;b (getint "请输入矩形短边长:"))</font></p><p><font face="Verdana">(setq x (/ a b))</font></p><p><font face="Verdana">或者我用对话框的形式得到a、b的值,这时候用户输入的很可能是 <font color="#cc3333">整数</font></font></p><p><font face="Verdana">那么得到的结果也很可能是错误的,除非整除,有什么方法可以改变一个</font></p><p><font face="Verdana">系统变量来解决这个问题吗?或者简单一点的,因为我的程序里有很多很</font></p><p><font face="Verdana">多这</font><font face="Verdana">样的以及连带的计算,一个一个改起来很麻烦,也容易出错……</font></p><p><font face="Verdana">另外我用下面这种处理方法(源程序简化来的,各变量都由</font><font face="Verdana">用户输入,很</font></p><p><font face="Verdana">可能就是整数,参考了<font color="#da2549"><strong>ZZXXQQ</strong></font><font color="#000000">的方法,所以定义如下):</font></font></p><p><font face="Verdana">(setq L 1000 b1 500 b2 500 detab1 100&nbsp;detab2 100)</font></p><p><font face="Verdana">(setq yinzi (/&nbsp;(atof (rtos L 2 2)) (+ b1 b2 detab1 detab2)))</font></p><p><font face="Verdana">确实得到了精度较高的结果,但是每个语句都这样修改太繁琐了……</font></p><p><font face="Verdana">而且有一个奇怪的问题:</font></p><p><font face="Verdana">(rtos L 2 2) 结果是"1000"</font></p><p><font face="Verdana">(rtos L 2 3) 结果还是"1000"</font></p><p><font face="Verdana">(rtos L 2 0) 结果就是"1000"</font></p><p><font face="Verdana">难道用来指定小数位数的参数是没用的吗??还是什么原因??</font></p><p><font face="Verdana">期盼解答……</font></p><p></p><p><font face="Verdana"></font></p>

zhpxxx 发表于 2007-11-14 11:04:00

<p>我程序都做了那么多了才发现这个问题</p><p>真是有够白痴的,T_T</p>

xshrimp 发表于 2007-11-14 11:46:00

<p>系统变量dimzin有关.</p>

zhpxxx 发表于 2007-11-14 16:15:00

本帖最后由 作者 于 2007-11-14 16:20:58 编辑 <br /><br /> <p>哦~原来是这样啊!试了一下,将dimzin改为1,&nbsp;(rtos l 2 2) 结果就成了"1000.00"了</p><p>谢谢ls!!</p><p>但是我的第一个关于计算精度的问题怎么办呢?只能用这种繁杂的方法改吗?</p><p><font face="Verdana">(setq L 1000 b1 500 b2 500 detab1 100&nbsp;detab2 100)</font></p><p><font face="Verdana">(setq yinzi (/&nbsp;(atof (rtos L 2 2)) (+ b1 b2 detab1 detab2)))</font></p><p>这样一来就麻烦大了,我得修改n条语句……</p><p>有没有其它的方法?</p>

ZZXXQQ 发表于 2007-11-14 18:14:00

<p>用FLOAT函数将整数转换成浮点数:</p><p>(setq a (getint "请输入矩形长边长:"))<br/>(setq b (getint "请输入矩形短边长:"))<br/>(setq x (/ (float a) b))<br/>;(setq x (/ a (float b)))<br/></p>

zhpxxx 发表于 2007-11-14 20:02:00

<p>哦~</p><p>呵呵</p><p>多谢斑竹!!</p><p>这样就简单些了</p>

无痕 发表于 2007-11-15 19:16:00

本帖最后由 作者 于 2007-11-15 19:19:28 编辑 <br /><br /> <p>计算式子中只要有一个实数,结果就是实数。</p><p>最简单的方法:</p><p>1.方法1  getint 改为 getreal</p><p>2.方法2</p><p>(/ a b 1.0)</p><p>(* a b 1.0)</p>
页: [1]
查看完整版本: 请问一个关于计算的白痴问题 T-T