9420.51280 返回值4
0.23000 返回值2
说明:返回小数点后有几位数,不算小数点最后边的零
FUNCTION getndec
* 取数字的小数位数
* getndec( nyournum)
* 最多可获得15位,超过15位都返回15
* 小数部分结尾的0的个数不计其内
* 如1234.566700 将返回4
LPARAMETERS nyournum
Local ndot,ndecbak,cnum
ndecbak=Set("Decimals") && 备份当前系统设置的小数精度
Set Decimals To 18 && 高小数精度为最大位
nyournum=nyournum%1 &&把数字XXXX.YYYYY转换 0.YYYYY
cnum=STR(nyournum,25,18) &&str实际最多能转成15位小数,
cnum=STRTRAN(cnum,0,SPACE(1)) &&把0换成空格
cnum=ALLTRIM(CNUM) &&去掉所有空格
ndot=LEN(cnum)-1 &&因为.占一位(小数点前的0已经换成空格并除掉)
Set Decimals To (ndecbak) &&设回系统以前的小数位
RETURN ndot
又完善了一下:
*获得一个数值的有效小数位数
?GetXsLen(9420.51280) &&返回值4
?GetXsLen(0.23000) &&返回值2
?GetXsLen(5.0) &&返回值0
FUNCTION GetXsLen
LPARAMETERS lnNum
lnDecBak=SET(DECIMALS)
SET DECIMALS TO 18
XsLen=LEN(TRANSFORM(lnNum))-IIF(AT(.,TRANSFORM(lnNum))>0,AT(.,TRANSFORM(lnNum)),LEN(TRANSFORM(lnNum)))
SET DECIMALS TO (lnDecBak)
RETURN XsLen
ENDFUNC