七、常用内部函数

1.数学函数

在Visual Basic 2008中,数学函数包含在System.Math类中。该类中包含许多方法和常量,利用这些方法和常量可以进行各种数学运算。这些方法可以作为数学函数使用,使用时,在函数名前面加“Math.”,如Math.sqrt(x)。表2-8中是一些常用的数学函数,其中a = -12.8,b = 5.47,x = 3.142。

表2-8 常用的数学函数

提示:通常,在程序的开头,即在Public Class Form1语句的上面添加语句:

Imports System.Math

在程序中就可以直接使用数学函数,即省略前面的“Math.”,例如直接写Round(4.56)。

另外,在Math类中还定义了两个公有字段:Math.PI表示圆周率,Math.E表示自然对数底。例如,求30°的正弦函数值,更精确地可以表示为Math.Sin(30*Math.PI/180)。

2.转换函数

程序中经常要将数据进行转换,如字符转换为整数、大小写字母转换、进制转换等。表2-9中是一些常用的转换函数,表2-10列出了ASCII码表。

表2-9 常用的转换函数

表2-10 ASCII码表

注意:表达式Val(TextBox1.Text)+ Val(TextBox2.Text)和表达式TextBox1.Text+ TextBox2.Text的运算结果完全不同,后者是字符串连接。

随机产生一个小写字母的表达式为:

Chr(Int(Rnd()*26)+Asc("a"))

判断文本框TextBox1中输入的一个字符是否为字母的表达式为:

UCase(TextBox1.Text)>= "A" And UCase(TextBox1.Text)<= "Z"

3.日期和时间函数

表2-11中给出了一些常用的日期和时间函数。其中d是一个日期数据,可以是日期型或字符型。函数Year、Month和Day分别返回指定日期的年、月、日的值,WeekDay返回指定日期是一星期中的第几天,其中星期日是1、星期一是2、……、星期六是7,运算结果为数值型数据。

表2-11 常用的日期和时间函数

注意:由于Day在System.Windows.Form命名空间中被定义成了枚举类型,直接使用Day函数将会产生多义性。使用Day函数时,必须用Microsoft.VisualBasic命名空间对其进行限制,即使用Microsoft.VisualBasic.Day。

获取年、月、日数值的另一个方法是通过Date类的属性:Year、Month和Day。假设变量d是Date类型,则d.Year返回d变量值所在年份。

提示:取得系统日期和时间的方法是通过Today、TimeOfDay和Now属性,其中Today为系统日期、TimeOfDay为系统时间、而Now同时包含系统日期和时间。VB中时间单位的表示方法及其含义如表2-12所示。

表2-12 时间单位表示

示例:如果现在是2012年8月20日上午9时58分35秒,则Today的值为2012/8/20,TimeOfDay的值为9:58:35,Now的值为2012/8/20 9:58:35。

4.字符串函数

表2-13中列出了Visual Basic中常用的字符串函数。

表2-13 常用的字符串函数

提示:Right可以是控件的属性名,当作为函数使用时,在前面加上“Microsoft.VisualBasic.”。

5.随机函数

格式:Rnd([x])

功能:产生一个[0,1)范围内Single类型的随机数,x的值决定了Rnd生成随机数的方式,系统根据种子值计算出下一个随机数。若x < 0,以x作为种子,则每次都得到相同的数值;若x = 0,则以最近生成的随机数作为返回值;若x > 0,得到序列中的下一个随机数。无x时,得到序列中的下一个随机数。

要产生一个[n,m]之间的随机数,可以使用公式

Int((m-n+1)*Rnd+n)

例如,

求[2,100)之间的随机数:Int(98*Rnd+2)

求[2,100]之间的随机数:Int(99*Rnd+2)

提示:Visual Basic使用一个随机数生成器产生随机数,默认情况下,每次运行程序时Visual Basic提供相同的种子值,因而产生的随机数序列是相同的。为了避免这种情况,使用随机函数前,可以使用Randomize语句,为随机数生成器产生一个新的种子值,从而改变随机数序列,每次运行产生不同的结果。

6.格式输出函数

格式:Format(表达式, 格式字符串)

功能:将数值、日期和时间按指定格式转换成字符串。其中表达式指要转换格式的数值、日期和时间表达式,格式字符串有数值格式、日期和时间格式,又分为预定义格式和用户定义格式。

(1)预定义格式

以下是部分常用的预定义格式。

● 不带千位分隔符的数字格式

表示不带千位分隔符的数字。格式名General Number、G或g保持原有数值的小数位数,格式名Fixed、F或f则四舍五入保留两位小数。

示例:Format(1234.567,"g")和Format(1234.567,"General Number")的结果为"1234.567";

      Format(1234.567, "Fixed")的运算结果为"1234.57";
      Format(1234.5, "f")的运算结果为"1234.50"。

● 带千位分隔符的数字格式

表示带千位分隔符并且四舍五入保留两位小数的数字。有两种:一种格式名是Standard、N或n,另一种格式名是Currency、C或c,后者与前者的区别是带有货币符号。

示例:Format(1234.567,"N")的运算结果为"1,234.57";

      Format(1234.567, "C")的运算结果为"¥1,234.57"。

● 百分比的数字格式

格式名Percent表示将数字乘以100后保留两位小数,并加百分号(%)。

示例:Format(0.567,"Percent")的运算结果为"56.70%"。

● 科学表示法的数字格式

使用标准的科学表示法表示数字。格式名Scientific提供两个有效位,格式名E或者e提供六个有效位。

示例:Format(1234.567,"Scientific")的运算结果为"1.23E+03";

Format(1234.567, "e")的运算结果为"1.234567E+003"。

● 逻辑值的格式

有三种格式名:Yes/No、True/False和On/Off。如果数字为0,则显示No(或者:否)、False、Off;否则显示Yes(或者:是)、True、On。

● 日期的格式

根据区域设置显示日期。格式名Date、Medium Date或D表示长日期格式,格式名Short Date或者d表示短长日期格式。

示例:假设今天是2012年3月25日,Format(Now, "Long Date")的运算结果为"2012年3月25日";Format(Now, "Short Date")的运算结果为"2012/3/25"。

提示:区域设置是通过Windows控制面板中的“区域和语言选项”进行设置的。

● 时间的格式

根据区域设置显示时间。格式名Long Time、Medium Time或T表示长时间格式,格式名Short Time或者t表示短长日期格式。

示例:假设现在是17点53分25秒,Format(Now, "T")的运算结果为"17:53:25";Format(Now,"t")的运算结果为"17:53"。

● 日期和时间的格式

同时显示日期和时间。格式名General Date或者G,根据区域设置显示日期和时间;格式名R或者r,以英语格式显示日期和时间。

示例:假设现在是2012年3月25日17点53分25秒,Format(Now, "G")的运算结果为"2012/3/25 17:53:25";Format(Now, "R")的运算结果为"Tue, 25 Mar 2012 17:53:25 GMT"。

(2)常用的用户定义数字格式

● “0”和“#”

符号“0”和“#”用于决定显示数值整数部分和小数部分的位数。其相同之处是:若数值整数部分的位数多于格式字符串的位数,按实际数值返回;若小数部分的位数多于格式字符串的位数,按四舍五入计算。不同之处是:当数值的位数少于格式字符串的位数时,“0”格式将不足部分补0,“#”则不显示。

示例:Format(123.456, "0.00")和Format(123.456, "#.##")的运算结果都为"123.46";

Format(123.456, "00000.0000")的运算结果为"00123.4560";

Format(123.456, "#####.####")的运算结果为"123.456"。

● . 和 ,

符号“.”表示加小数点,“,”表示加千分位。

示例:Format(1234.56, "0,000.00")的运算结果为"1,234.56";

● %

Format(1234, "0,000.00")的运算结果为"1,234.00"。

将数值乘以100,后面加%,结果为百分比形式。

示例:Format(0.12346, "##.00%")的运算结果为"12.35%"。

● $

在指定位置加“$”符号。

示例:Format(1234.56, "$#,##0.00")的运算结果为"$1,234.56";

Format(0.123456, "$#,##0.00")的运算结果为"$0.12"。

(3)常用的用户定义日期和时间格式

● 日期

yy和yyyy显示年份,yy以两位数显示年份,yyyy以四位数显示年份。M、MM和MMMM显示月份,M显示112,MM显示0112,MMMM显示月份名称:一月~十二月。d和dd显示日,d显示131,dd显示01~31。ddd和dddd显示星期名,ddd显示:日~六,dddd显示:星期日~星期六。

示例:若当前日期为2012年3月24日,Format(Today, "MMMM")的运算结果为"三月",而Format(Today,"M月d日dddd")的运算结果为"3月24日星期六"。

提示:M和d既可作为预定义格式,又可作为用户定义格式。为了与预定义格式符区分,如果作为用户定义的格式中的唯一字符,应在前面加%。例如,Format(Today, "%M")、Format(Today, "%d")。

● 时间

h和hh按12小时制显示小时,后者前导带0,h显示0~11,hh显示00~11。H和HH按24小时制显示小时,后者前导带0,H显示0~23,HH显示00~23。m和mm显示分钟,后者前导带0,m显示0~59,hh显示00~59。s和ss显示秒,后者前导带0,s显示0~59,ss显示00~59。tt显示上午或下午。

示例:若当前时间是2012年3月24日21时18分8秒,函数Format(Now, "M/d/yyyy H:mm")的计算结果为"3/24/2012 21:18",而函数Format(Now, "M/d/yyyy h:mm")的计算结果为"3/24/2012 9:18"。

7.Shell函数

格式:Shell(命令字符串[, 窗口类型])

功能:调用DOS或Windows下的可执行程序。其中命令字符串是要执行的应用程序名(包括路径和文件名)。窗口类型表示执行应用程序时窗口的状态,为AppWinStyle枚举成员。当函数成功调用时返回一个任务标志ID,不成功则返回0,用于测试判断应用程序是否正常运行。

示例:调用Windows的“计算器”程序则执行语句

f = Shell("c:\windows\System32\calc.exe",AppWinStyle.NormalFocus)

如果在文本框TextBox1中输入了要打开的文本文件的路径和文件名,使用下列语句将运行Windows的“记事本”程序,并打开指定的文本文件,窗口以最大化显示:

    i = Shell("c:\windows\System32\notepad.exe " + TextBox1.Text,
            AppWinStyle.MaximizedFocus)