Visual FoxPro 3.0中自编随机数函数 闫东 1997-01-01   在测试程序、模拟程序中,常常要使用随机数,这就需要有一个产生随机数的函数。但在Visual FoxPro 3.0中却没有类似的函数,这无疑给编程带来很大的困难。为解决这一问题笔者自编了一个用于Visual FoxPro 3.0的随机函数──RND()。   为得到随机数,首先要有一个快速变化的数据源,笔者想到了Windows 95的API函数TimeGetTime,此函数返回Windows 95启动开始已逝去的毫秒数,其值以毫秒级发生变化,这个条件显然是满足的;其次,要求随机数的每一位数的变化都要很快,至少是前几位数的变化要快,但用TimeGetTime得到的随机数正好相反(最后一位以毫秒级变化,前几位却几秒甚至几十秒才变化一次),于是笔者以使用Visual FoxPro 3.0的STR()和LEFT()函数将TimeGetTime的返回值调个头,如此一来便可以满足随机数的要求了。   程序设计中使用FoxTools.FLL库中的RegFn()函数和CallFn()函数来调用TimeGetTime函数。下面的一段程序可产生100个1到100之间的随机数:   Set Talk Off   For I=1 To 100   ?Int(Rnd()*100)+1   EndFor   Function RND   Set Decimals To 8   Set Library To C:\VFP\FOXTOOLS.FLL   SysTime=Regfn("TimeGetTime","","I","MMSYSTEM")   Ss=Callfn(SysTime)   RndS=Val("0."+Right(Str(Abs(Ss)),1)+   Left(Right(Str(Abs(Ss)),2),1)+   Left(Right(Str(Abs(Ss)),3),1)+   Left(Right(Str(Abs(Ss)),4),1)+   Left(Right(Str(Abs(Ss)),5),1))   Return(Rnds)   以上程序在Windows 95和Visual FoxPro 3.0中运行通过。