请问如何判断一个数的小数部分的位数?
<P>请问如何判断一个数的小数部分的位数?</P><P>如:1.123 时,返回3。</P>
<P> 1.0时,返回1。</P>
<P> 1时,返回0。</P> lazybug 发表于 2006-7-28 16:32
(defun c:test (/ a tt n) (setq a 1.0) (setq tt (vl-prin1-to-stri ...
谢谢解答!收用了! <P>无法判断。如果只判断尾数,则1.0与1相同,当1是整数时,可以用判断数据类型的方法直接返回0。</P> <P>vl-prin1-to-string</P>
<P>先转换成字符串再处理</P>
<P>不过对于1.00、1.1230之类返回的值还是“1.0”、“1.123”</P> <P>如果是:"1.123 时,返回3。</P>
<P> "1.0" 时,返回1。</P>
<P> "1" 时,返回0。<BR>即成</P>
<P> </P> (defun c:test (/ a tt n)<BR> (setq a 1.0)<BR> (setq tt (vl-prin1-to-string a))<BR> (if (setq n (vl-string-position 46 tt))<BR> (setq n (- (strlen tt) n 1))<BR> (setq n 0)<BR> )<BR>) <P>大家请看这样是否可以:</P>
<P>1)先把实数转化成字符串这是一定的(seq b(rtos a 2 16))</P>
<P>2)判断小数点的位置:(setq c (vl-string-position (ascii ".") b))</P>
<P>3)截掉整数部分:(setq d (substr b 1 (1+ c)))</P>
<P>4取剩余部分的长度,(setq n (strlen d))</P>
<P>50,ok!</P>
<P> </P>
<P> </P> <P>完整的程序就不写了</P> 谁能区分1.25和1.250? <P>我认为,(setq a 1.25)跟(setq a 1.250)是等价的</P>
<P>应该是区分不开的</P> 1.25 与1.250如果是real,哪没什么意思,如果是string,就用楼上的提供的
页:
[1]
2