2.4 常用内部函数
VB中的函数实际就是系统定义的运算。标准函数是系统已经定义好的函数,它们能够完成特定的功能,用户可以直接使用。这里的“函数”的概念跟数学中的函数有相近之处。不同函数名称不同,参数也各不相同。VB中的函数就是系统定义好的一种特定运算,用户只要给定参数,就可以通过函数名得到运算结果。函数的一般格式为:
函数的调用格式:<函数名>([参数1],[参数2]…)
说明:
(1)每个函数都有函数名,通过函数名调用函数。
(2)数学中函数的“自变量”在程序设计语言中称为“参数”,函数的运算结果称为“返回值”。
(3)函数是以表达式的形式调用的,而不能单独作为一个语句。例如,
a = Sin(b)
z = Sin(x) + Cos(x + y)
上面的例子中,Sin和Cos是函数名,括号里面的表达式是参数,每种函数使用的参数类型都是规定好的,所以,了解函数的参数类型才能正确地使用函数。下面将介绍一些常用的标准函数。
1. 数学函数
VB提供的常用数学函数及功能如下表所示。
(1)数学函数的参数x为数值型。其中Sin、Cos和Tan的参数x必须为弧度值。例如,求30度的正弦值,不能写成Sin(30),必须把30度转化为弧度值,应写成Sin(30 * 3.14159 / 180)。VB只提供了4个三角函数,其他三角函数都可以由这4个三角函数导出。
| 函数名 | 功能说明 | 举 例 |
Fix(x) | 取整,截去小数部分 | Fix(3.125)结果为3,Fix(2.98)结果为2,Fix(-2.6)结果为-2 |
Int(x) | 求不大于x最大整数 | Int(1.9)结果为1,Int(1.3)结果为1,Int(-2.5)结果为-3 |
Round(x,n) | 将x四舍五入,保留n位小数 | Round(1.9)结果为2,Round(1.916,2)结果为1.92 |
Abs(x) | 求绝对值 | Abs(-3.5)结果为3.5 |
Sgn(x) | 求数字符号 | Sgn(-3)结果为-1,Sgn(3)结果为1, Sgn(0)结果为0 |
| Sqr(x) | 求平方根 | Sqr(25)结果为5 |
Exp(x) | 指数函数,求ex | Exp(0)结果为1 |
| Log(x) | 求自然对数 | Log(1)结果为0 |
Sin(x) | 正弦函数 | Sin(0)结果为0 |
| Cos(x) | 余弦函数 | Cos(0)结果为1 |
| Tan(x) | 正切函数 | Tan(0)结果为0 |
| Atn(x) | 反正切函数 | Atn(0)结果为0 |
(2)在使用数学函数时,必须保证参数的值在数学上有意义。例如,使用Sqr函数,必须保证参数为大于或等于0的数。
(3)对于Sgn(x)函数,当x<0时,函数值为-1;当x>0时,函数值为1;当x=0时,函数值为0。
(4)书写数学表达式时要注意使用正确的函数形式。例如,在VB中,数学表达式ln[ex+|arctg(x)|]+cos2x的正确写法应为:Log(Exp(x)+Abs(Atn(x)))+Cos(x)^2。
(5)四舍五入规则:小于5时舍,大于5时入,等于5时的舍入情况取决于前一位数,当前一位数为偶数时舍,为奇数时入。例如,
?Round(2.5) '结果为:2
?Round(1.5) '结果为:2
2. 字符串函数
VB提供了大量的字符串函数,应用这些字符串函数可以方便灵活地处理字符串。VB提供的常用字符串函数及功能如下表所示。
| 函 数 名 | 功 能 说 明 |
| Trim(字符串表达式) | 删除字符串两端空格字符 |
| LTrim(字符串表达式) | 删除字符串左端空格字符 |
| RTrim(字符串表达式) | 删除字符串右端空格字符 |
| Left(字符串表达式,n) | 从字符串的左端截取n个字符 |
| Right(字符串表达式,n) | 从字符串的右端截取n个字符 |
| Mid(字符串表达式,n,m) | 从字符串的第n个字符开始截取m个字符 |
| Len(字符串表达式) 或 Len(变量名) | 求字符串的长度,或求某个变量所占的字节数 |
| LenB(字符串表达式) | 求字符串所占的字节数 |
| String(n,字符)或 String(n,ASCII码) | 产生由n个指定字符(或指定ASCII码值对应的字符)组成的字符串 |
| Space(n) | 产生由n个空格组成的字符串 |
| InStr([起始位置,]字符串1,字符串2 [,n]) | 返回“字符串2”在“字符串1”中第一次出现的位置;若加上“起始位置”,表示从该位置开始查找,如果省略默认从第一个字符开始查找;n表示字符串的比较方式,0为区分字母的大小写,1为不区分字母的大小写,如果省略默认为0;如果给出参数n,则参数“起始位置”也必须给出 |
| UCase(字符串表达式) | 将字符串中的所有字母字符均转换成大写,非字母字符不变 |
| LCase(字符串表达式) | 将字符串中的所有字母字符均转换成小写,非字母字符不变 |
| Asc(字符串表达式) | 求字符串表达式中第一个字符的ASCII码值 |
| Chr(表达式) | 求以表达式的值为ASCII码的字符 |
| Val(字符串) | 将字符串转换为数值,转换时遇到第一个非数字字符则停止转换,但指数符号、小数点和负号除外 |
| Str(数值表达式) | 将数值转换为对应的字符串 |
3. 日期时间函数
函 数 名 | 功 能 说 明 |
| Now或Now() | 返回系统当前的日期和时间 格式为:yyyy-mm-dd hh:mm:ss |
| Date或Date() | 返回系统当前的日期,格式为:yyyy-mm-dd |
| DateSerial(年,月,日) | 把年、月、日3个参数连接形成一个日期 |
| DateValue(日期字符串) | 返回一个日期 |
| Day(日期字符串) | 返回日期字符串中的日,结果为整型数 |
| WeekDay(日期字符串) | 求指定日期是星期几,结果为整型数,1代表星期日,2代表星期一…… |
| WeekDayName(整数) | 返回星期代号,例如WeekDayName(1)结果为:星期日 |
| Month(日期字符串) | 返回日期字符串中的月份,结果为整型数 |
| Year(日期字符串) | 返回日期字符串中的年份,结果为整型数 |
| Hour(时间字符串) | 返回时间字符串中的小时数,结果为整型数 |
| Minute(时间字符串) | 返回时间字符串中的分钟数,结果为整型数 |
| Second(时间字符串) | 返回时间字符串中的秒数,结果为整型数 |
| Time或Time() | 返回系统当前的时间,格式为:hh:mm:ss |
| Timer或Timer() | 返回从午夜开始到当前经过的秒数 |
| TimeSerial(时,分,秒) | 把时、分、秒3个参数连接形成一个时间 |
| TimeValue(时间字符串) | 返回一个时间 |
说明:其中Date、Time和Now 3个函数都有无参数的形式,例如,
?Date,Time,Now
4. 随机数函数
4.1 Rnd函数
格式:Rnd[(x)],其中参数x是一个双精度浮点数,可以省略。
功能:可产生一个0~1之间(大于或等于0,但小于1)的单精度随机数。下一个要产生的随机数受参数x的影响。
(1)当x<0时,每次产生相同的随机数。
(2)当x>0或省略时,每次产生不同的随机数。
(3)当x=0时,该次产生与上次相同的随机数。
说明:该函数产生的是一个单精度随机数,要产生随机整数,可利用取整函数来完成。例如,要产生0~100(包括0,不包括100)的随机整数,可以写成Int(Rnd*100)。
产生随机整数的公式:
(1)产生区间[n,m) 范围内的随机整数:Int(Rnd*(m-n)+n)。
(2)产生区间[n,m] 范围内的随机整数:Int(Rnd *(m-n+1)+n)。
例如,产生[100, 1000)之间的随机整数为:Int(Rnd *900+100)。
4.2 Randomize语句
格式:Randomize[(x)],其中参数x可以省略。
功能:将Rnd函数的随机数生成器初始化。
当应用程序多次调用同一个过程中的Rnd函数时,相同的随机数序列会反复出现,使用Randomize语句可以消除这种情况,从而产生不同的随机数序列。所以一般情况下,在调用Rnd函数之前,要先使用无参数的Randomize语句。例如,
Randomize
Print Rnd
=============================================================
扩展学习:扩展学习2.4.doc(下载附件 43.5 KB)-转换函数
案例:案例2.4.doc(下载附件 25.5 KB)-函数应用
=============================================================

