tq0196_cn 发表于 2006-7-28 12:04:00

请问如何判断一个数的小数部分的位数?

<P>请问如何判断一个数的小数部分的位数?</P>
<P>如:1.123 时,返回3。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.0时,返回1。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1时,返回0。</P>

chenbh2 发表于 2024-7-9 14:52:20

lazybug 发表于 2006-7-28 16:32
(defun c:test (/ a tt n)&nbsp;&nbsp;&nbsp; (setq a 1.0)&nbsp;&nbsp;&nbsp; (setq tt (vl-prin1-to-stri ...

谢谢解答!收用了!

ZZXXQQ 发表于 2006-7-28 12:59:00

<P>无法判断。如果只判断尾数,则1.0与1相同,当1是整数时,可以用判断数据类型的方法直接返回0。</P>

lazybug 发表于 2006-7-28 16:12:00

<P>vl-prin1-to-string</P>
<P>先转换成字符串再处理</P>
<P>不过对于1.00、1.1230之类返回的值还是“1.0”、“1.123”</P>

Andyhon 发表于 2006-7-28 16:13:00

<P>如果是:"1.123 时,返回3。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "1.0" 时,返回1。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "1" 时,返回0。<BR>即成</P>
<P>&nbsp;</P>

lazybug 发表于 2006-7-28 16:32:00

(defun c:test (/ a tt n)<BR>&nbsp;&nbsp;&nbsp; (setq a 1.0)<BR>&nbsp;&nbsp;&nbsp; (setq tt (vl-prin1-to-string a))<BR>&nbsp;&nbsp;&nbsp; (if&nbsp;(setq n (vl-string-position 46 tt))<BR>&nbsp;(setq n (- (strlen tt) n 1))<BR>&nbsp;(setq n 0)<BR>&nbsp;&nbsp;&nbsp; )<BR>)

zxq651007z 发表于 2006-7-28 20:11:00

<P>大家请看这样是否可以:</P>
<P>1)先把实数转化成字符串这是一定的(seq b(rtos a 2 16))</P>
<P>2)判断小数点的位置:(setq c&nbsp;(vl-string-position (ascii ".")&nbsp; b))</P>
<P>3)截掉整数部分:(setq d (substr b 1 (1+ c)))</P>
<P>4取剩余部分的长度,(setq n (strlen d))</P>
<P>50,ok!</P>
<P>&nbsp;</P>
<P>&nbsp;</P>

zxq651007z 发表于 2006-7-28 20:14:00

<P>完整的程序就不写了</P>

ZZXXQQ 发表于 2006-7-29 13:07:00

谁能区分1.25和1.250?

lazybug 发表于 2006-7-29 16:43:00

<P>我认为,(setq a 1.25)跟(setq a 1.250)是等价的</P>
<P>应该是区分不开的</P>

blue123 发表于 2006-7-30 09:00:00

1.25 与1.250如果是real,哪没什么意思,如果是string,就用楼上的提供的
页: [1] 2
查看完整版本: 请问如何判断一个数的小数部分的位数?