七、常用内部函数
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显示1~12,MM显示01~12,MMMM显示月份名称:一月~十二月。d和dd显示日,d显示1~31,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)