获得一个数值的有效小数位数(不含后面的0补位)

来源:互联网 发布:网络歌曲大全在线播放 编辑:程序博客网 时间:2024/06/04 18:05

VFP6.0时,如果小数部分一样会有问题,如9.2222,转换就变为9.222200000000001

?GetXsLen(9420.51280)  &&返回值4
?GetXsLen(0.23000)
    &&返回值2
?GetXsLen(5.0)         &&返回值0


Function GetXsLen
   
Lparameters
lnNum
   
Private All
   
lnDecBak=Set
('DECIMALS')
   
Set Decimals To
18
   
Do Case
        Case Version
(5)<700
&&VFP6
           
lcNum=Transform(lnNum)
&&VFP6.0时,如果小数部分一样会有问题,如9.2222,转换就变为9.222200000000001
       
Case Version(5)>=700 And Version(5)<900
&&VFP7、8
           
lcNum=Transform
(lnNum)
           
If At
('.',lcNum)>0
                lnNumLen=
Len
(lcNum)
               
For I=lnNumLen To 1 Step
-1
                   
If !Substr
(lcNum,I,1)=='0'
                       
Exit
                    Endif
                Endfor
               
lcNum=Left
(lCNum,I)
           
Endif
        Case Version
(5)>=900
&&VFP9及以上
           
lcNum=Alltrim(Transform
(lnNum),'0')
   
Endcase
   
XsLen=Len(lcNum)-Iif(At('.',lcNum)>0,At('.',lcNum),Len
(lcNum))
   
Set Decimals To
(lnDecBak)
   
Return
XsLen
Endfunc