以下是引用qingfameng在2012-2-16 01:24:10的发言:
回复楼上: ? allt(trim( str(xx,99,18) ,"0"),[.]," "),还是不行吧 ! vfp 对数值表示的最大位数,以及多少位后自动科学计数,还有他的自动四舍五入等,都要考虑的。比如:xx=124348.123456789014 时,比你设定的范围小的多啦,但是按你的式子算,数值还是不对呀。出了错不知道!! 但是,用程序段有他的好处,可以在其中再加个判断,出错能知道的。对吗?
哎, 我都不知怎么说你好了~ 你所给的例值 本身就是违例(18位), 不符合vfp精确出值的规则的啊~ 还要另外扯到什么科学计数法上去~
我跟贴一般都是不超过1-2贴的, 这次是大为违例了, 最后再回一贴吧, 就此打住~ 就算你19楼的方法 很不错就是了~
如果你有兴趣, 你比较1下 如下的4个运行结果吧~ 请仔细比较~
clea
xx=124348.123456789014
**1.
?xx
,"这是vfp本身 直接打出的值"
**2.
?allt(trim( str(xx,99,18) ,"0"),[.]," ")
,"这是 allt(trim(str())) 得出的值"
** 21楼程序
?ctransform(xx)
,"这是 21楼程序 得出的值"
** 19楼程序
messageb("下面接着 运行19楼程序","")
cx=alltrim(str(xx))
t=1
do while val(cx)<>xx
cx=alltrim(str(xx,len(alltrim(str(xx)))+t,1+t))
t=t+1
enddo
if substr(cx,1,1)="." && 假如是 ‘0’开头的小数
cx="0"+cx
endif
?cx
,"这是 19程序 产生的值"
retu
FUNCTION ctransform
&&21楼子程序
LPARAMETERS nInput
LOCAL lcInput
lcInput=TRANSFORM(nInput)
DO WHILE '.'$lcInput AND RIGHT(lcInput,1)$'.0'
lcInput=LEFT(lcInput,LEN(lcInput)-1)
ENDDO
RETURN lcInput