你的位置:创意公社- ideaer >> >> 程序开发 >> 详细内容 在线投稿

VB编程基础教程7–数据类型

排行榜 打印 发给朋友 举报 发布者:ic70702
热度513票  浏览117次 【共0条评论】【我要评论 时间:2010年9月11日 23:17
创意公社- ideaer.HQtbbk

变量是用来存储值的所在处;它们有名字和数据类型。变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。在声明变量时也可指定它的数据类型。所有变量都具有数据类型,以决定能够存储哪种数据。创意公社- ideaer P2ix*A0vN
根据缺省规定,如果在声明中没有说明数据类型,则令变量的数据类型为 variant。variant 数据类型很象一条变色龙— 它可在不同场合代表不同数据类型。当指定变量为 variant 变量时,不必在数据类型之间进行转换,visual basic 会自动完成各种必要的转换。
y E2I uL F/x1但是,如果知道变量确实总是存储特定类型的数据,并且还声明了这种特定类型的变量,则 visual basic 会以更高的效率处理这个数据。例如,存储人名的变量最好表示成 string 数据类型,因为名字总是由字符组成。创意公社- ideaerk"L IPmA.HU~
除变量外,数据类型也用于其它场合。在给属性赋值时,这个值就有数据类型;函数的参数也有数据类型。事实上,在 visual basic 中,凡是与数据有关的东西就与数据类型有关。
1J nw#f;iY"w{3i1也可声明任何基本类型的数组。
&QO-fH-z/C1qT`1详细信息 关于更详细信息,请参阅本章后面的“数组”部分。在“性能和兼容性的设计”中还将讨论通过选择数据类型来提高应用程序的性能。
S MfS8w$y/[7|)d1声明带数据类型的变量创意公社- ideaer]0i:L;u~,{
在使用非 variant 变量之前,必须使用 private、public、dim 或 static 语句将变量声明为 as type。例如,下列语句分别声明了 integer、double、string 和 currency 类型的变量:
TY)o,v5e1private i as integer创意公社- ideaer'tYLd pF.`?
dim amt as double
"Nv/{9d8fv["U1static yourname as string创意公社- ideaer0Ks6A4??oR5` kx5_
public billspaid as currency创意公社- ideaerU n&T Cc"G[|QUJ
一个声明语句可将多个声明组合起来,请看下列语句:创意公社- ideaerZ(S4_8A:~\m8zQ
private i as integer,amt as double
`'xXM%t)Z1private yourname as string,billspaid as currency创意公社- ideaer0FT vO4LK}
private test,amount,j as integer创意公社- ideaernni&R,j'BLPN
注意 如果不提供数据类型,则指定变量为缺省类型。在上例中,变量 test 和 amount 是 variant 数据类型。如果由于其它编程语言的经验使人感到同一个声明语句中的所有变量都有相同的指定数据类型(此例中为 integer),那么,此处的结果可能会令人感到新鲜。
.g0\ }1aU.Bv1numeric 数据类型
VV;r Y n8X {+Z!fw \&k1visual basic 支持几种 numeric 数据类型— integer(整型)、long(长整型)、single(单精度浮点型)、double(双精度浮点型)和 currency(货币型)。与 variant 类型相比,numeric 类型占用的存储空间通常要少。创意公社- ideaer6At F f `m~ _
如果知道变量总是存放整数(如 12 )而不是带小数点的数字(如 3.57),就应当将它声明为 integer 类型或 long 类型。整数的运算速度较快,而且比其它数据类型占据的内存要少。在 for…next 循环内作为计数器变量使用时,整数类型尤为有用。创意公社- ideaerI`.o1^ Do^"U
详细信息 关于控制结构的详细资料,请参阅本章后面的“控制结构概述”。创意公社- ideaer+R0]]t+t @"E
如果变量包含小数,则可将它们声明为 single、double 或 currency 变量。currency 数据类型支持小数点右面 4 位和小数点左面 15 位;它是一个精确的定点数据类型,适用于货币计算。浮点(single 和 double)数比 currency 的有效范围大得多,但有可能产生小的进位误差。
n:wj'IaZ_q1注意 浮点数值可表示为 mmmeeee 或 mmmdeee ,其中 mmm 是假数,而 eee 是指数(以 10 为底的幂)。single 数据类型的最大正数值为 3.402823e+38,或 3.4 乘以 10 的 38 次方;double 数据类型的最大正数值是 1.79769313486232d+308 或 1.8 乘以 10 的 308 次方。用 d 将数值文字中的假数部分和指数部分隔开,就会导致将该值作为 double 数据类型来处理。同样,用这种方式使用 e,也会导致将该值作为 single 数据类型来处理。创意公社- ideaer9`!uC:[;BM
byte 数据类型创意公社- ideaer8M U%UND,y
如果变量包含二进制数,则将它声明为 byte 数据类型的数组。(本章后面的“数组”中将讨论数组)。在转换格式期间用 byte 变量存储二进制数据就可保留数据。当 string 变量在 ansi 和 unicode 格式间进行转换时,变量中的任何二进制数据都会遭到破坏。在下列任何一种情况下,visual basic 都会自动在 ansi 和 unicode 之间进行转换: 创意公社- ideaer%fp*{MI9j
读文件时
2h2\0Pk E X"i F'g1创意公社- ideaerd+DH8P }q)g
写文件时创意公社- ideaerE1r t3e'iE
创意公社- ideaer-O,O? Y)OX#s
调用 dll 时
w z#j#^ O1创意公社- ideaerHlV+S6x{m$jv
调用对象的方法和属性时 创意公社- ideaerx4rB X%^*i{}
除一元减法外,所有可对整数进行操作的运算符均可操作 byte 数据类型。因为 byte 是从 0 – 255 的无符号类型,所以不能表示负数。因此,在进行一元减法运算时,visual basic 首先将 byte 转换为符号整数。创意公社- ideaerC9Up@8E,I
所有数值变量都可相互赋值,也可对 variant 类型变量赋值。 在将浮点数赋予整数之前, visual basic要将浮点数的小数部分四舍五入,而不是将小数部分去掉。创意公社- ideaer8k@'[ g@ n
详细信息 关于 unicode 和 ansi 转换的详细信息,请参阅“国际化”。
no6eH3S%tS"?Q1string 数据类型创意公社- ideaer |^2Fv!v*]9`
如果变量总是包含字符串而从不包含数值,就可将其声明为 string 类型。
G {uF#RJCN1private s as string创意公社- ideaer|&@{#rS;U5`k.y
然后可将字符串赋予这个变量,并用字符串函数对它进行操作。
1Pj%\B+vu`1s = “database”
~Iq;z-[%Ip r2fL1s = left (s,4)创意公社- ideaer"\{rp(CyU6Cg2[ R
按照缺省规定,string 变量或参数是一个可变长度的字符串,随着对字符串赋予新数据,它的长度可增可减。 也可以声明字符串具有固定长度。可用以下语法声明一个定长字符串:
j)}w1g~p+F{ {1string * size创意公社- ideaer4Cb)uk G;dZ s
例如,为了声明一个长度为 50 字符的字符串,可用下列语句:创意公社- ideaer%z9R-j} Q3B}
dim empname as string * 50创意公社- ideaer S3u0iQ6K O(X
如果赋予字符串的字符少于 50 个,则用空格将 empname 的不足部分填满。如果赋予字符串的长度太长,已不能成为定长字符串,则 visual basic 会直接截去超出部分的字符。
s\-qVdu9Ax1因为定长字符串用空格填充尾部多余的空间,所以在处理定长字符串时可发现,删除空格的 trim 和 rtrim 函数是很有用的。
V N5n_ H]-n1可将标准模块中的定长字符串声明为 public 或 private。在窗体和类模块中,必须将定长字符串声明为 private。
]Gqlg ^N3q'_*U1详细信息 请参阅语言参考中的“ltrim、rtrim function 和 trim 函数”。创意公社- ideaerKE}Z k-pP
交换字符串和数字创意公社- ideaer"g`!Tt2h!Yo
如果字符串表示数值,则可将字符串赋予数值变量。也可将数值赋予字符串变量。例如,将命令按钮、文本框和列表框放置在窗体中。在命令按钮的 click 事件中输入下列代码。运行应用程序并单击命令按钮。
7Qmt2d S P1private sub command1_click ()创意公社- ideaer]u Kbf+jW4imi"ET k
   dim intx as integer
?Re[,T1   dim stry as string创意公社- ideaer4`(y/Y(EXz[ I*w8E
   stry = “100.23″创意公社- ideaerO3uZ z(U;^o9I
   intx = stry                   ‘将字符串传递给数值变量。创意公社- ideaerSc(i`&hh @+L/v
   list1.additem cos (stry)     ’将字符串中数值的余弦值。创意公社- ideaer#V9FA0E:v7K9}
                              ‘添加到列表框中。
g/L[9[q T^8I^$I S1   stry = cos (stry)           ’将余弦值传递给字符串变量。创意公社- ideaerP [ _:JG;@
   text1.text = stry        ‘在文本框中显示字符串。
-S4l`.C-QT|{5]5{(k&_1end sub创意公社- ideaer%MD6[2v@nz
visual basic 会自动强制变量为适当的数据类型。在转换字符串和数值时要小心;如果传送字符串中的值不是数值,则在运行时会出错。
8Bg%_/l:SNA I1boolean 数据类型创意公社- ideaerq]eV/@$X%SJ
若变量的值只是“true/false”、“yes/no”、“on/off”信息,则可将它声明为 boolean 类型。boolean 的缺省值为 false。在下面的例子中,blnrunning 是 boolean 变量,存储简单的 yes/no 设置。
NJAm/p!Ei1dim blnrunning as boolean创意公社- ideaer)Z#iuIYul0s5aF2Ts
   ’查看磁带是否在转。创意公社- ideaerH^v)Tp}F
   if recorder.direction = 1 then
Sdk/w1tc#_+O!H1   blnrunning = true创意公社- ideaer-R})S6h+K.~
end if创意公社- ideaerF?@3}(vo#iA
date 数据类型
zg%Em3mj{:^1date 和 time 值既可包含在特定的 date 数据类型中,又可包含在 variant 变量中。一般的 date 特性适用于这两种类型。
#iD,MXq)v/R \ ysP1详细信息 请参阅《联机手册》的“高级变量主题”中的“在 variant 变量中存储 date/time 值”部分。
5e-f,^8W{z7yh%EZ }1当其它数值数据类型转换为 date 时,小数点左边的值表示 date 信息,小数点右边的值则代表 time。午夜为 0,正午为 0.5。负数表示公元 1899 年 12 月 31 日之前的 date。
WY|u%MgP/e1object 数据类型
C2~"C-p!JZq1object 变量作为 32 位(4 个字节)地址来存储,该地址可引用应用程序中或某些其它应用程序中的对象。可以随后(用 set 语句)指定一个被声明为 object 的变量去引用应用程序所识别的任何实际对象。
Qmry2S8mN1dim objdb as object
h&|&x,O+` t!y1set objdb = opendatabase (“c:\vb5\biblio.mdb”)创意公社- ideaer.W;j'^3?ZJ[!G$t@
在声明对象变量时,请试用特定的类,而不用一般的 object(例如用 textbox 而不用 control,或者象上面的例子那样,用 database 取代 object)。运行应用程序之前,visual basic 可以决定引用特定类型对象的属性和方法。因此,应用程序在运行时速度会更快。在“对象浏览器”中列举了特定的类。创意公社- ideaer%]8tmy\,VY$|9QGq
当使用其它应用程序的对象,并在“对象浏览器”中的“类”列表中列举对象时,不要用 variant 或一般的 object,而应声明对象。这样可确保 visual basic 能够识别引用的特定类型对象,在运行时解决引用问题。创意公社- ideaer#Zv _-H$I1@#T:o%Z
详细信息 关于创建和指定对象以及对象变量的更详细信息,请参阅本章后面的“创建对象”部分。
W/y:RH%ezr3w*Y#L1转换数据类型创意公社- ideaerS9tf#R-}"RV
visual basic 提供了几种转换函数,可用来将值转换成特定数据类型。例如,用 ccur 函数将值转换成 currency 类型:
c0F"pYS-t%~B%~1payperweek = ccur (hours * hourlypay)创意公社- ideaerhn3YlHov1oc.x.W
转换函数 将表达式转换成
(A!O%t[/vD1cbool boolean
Yh'eo8V9R;A6E8Pl E1cbyte byte
^Z8N8Rx.s4a1ccur currency
'?Wx:wH/g1F1cdate date 创意公社- ideaer&AwN;rO u2tC-x
cdbl double
md(xO"FB Z!x1cint integer
$T_wB#T1c(k.Y1clng long
;W |.N Y7tQ1csng single 创意公社- ideaerRKV&@7U)z
cstr string
Lr,uerh%E&yAAL1cvar variant
al2A'I'].N P1cverr error 创意公社- ideaerzx(Dds

-h?n#ks/?cD Jdb1注意 对目标数据类型,传递到转换函数的值必须是有效的,否则会发生错误。例如,如果想把 long 型数转换成 integer 型数,那么,long 型数必须在 integer 数据类型的有效范围之内。
6?)E.^+K$]W'}f^j$C1详细信息 在联机帮助中查找指定的转换函数。创意公社- ideaer2l/n@`3JV^,q+M
variant 数据类型创意公社- ideaer/uM.|Nl.r}
variant 变量能够存储所有系统定义类型的数据。如果把它们赋予 variant 变量,则不必在这些数据的类型间进行转换; visual basic 会自动完成任何必要的转换。例如:
+L)y9pO0J(B*oW1dim somevalue      ‘缺省为 variant。创意公社- ideaerGDupl s
somevalue = “17″   ’somevalue包含 “17″(双字符的串)。创意公社- ideaerd9bq6kx@#O
somevalue = somevalue – 15       ‘现在, somevalue 包含数值 2。创意公社- ideaer/N @ \!k:N1j
somevalue = “u” & somevalue   ’现在, somevalue 包含 “u2″ (双字符的串)。创意公社- ideaer#TA,X.b X9f1B"W]
不必过多关注 variant 变量中数据的类型就可对 variant 变量进行操作,但须避免落入陷阱。
-G0qh`&fSjr }1如果对 variant 变量进行数学运算或函数运算,则 variant 必包含某个数。更详细的信息,请参阅《联机手册》中“高级变量主题”中的“变量中存储的 numeric 值”部分。
2DVZ,du5ji4L [1
y/^ rY*qA1如果正在连接两个字符串,则用 ” & ” 操作符而不用 ” + ” 操作符。更详细的信息,请参阅《联机手册》中“高级变量主题”中的“variant 变量中存储的 strings”部分。 创意公社- ideaer%tI.m fA(k|'rp%i
除了可以像其它标准数据类型一样操作外,variants 还包含三种特定值:empty,null 和 error。创意公社- ideaer;OI/`/{.fW,O ]8M
empty 值创意公社- ideaer+R$`UhZ l$qTVJVx
有时需要知道是否已将一个值赋予所创建的变量。在赋值之前,variant 变量具有值 empty。值 empty 是异于0、零长度字符串 (“”) 或 null 值的特定值。可用 isempty 函数测试 empty 值:
sl0z*B^1if isempty (z) then z = 0创意公社- ideaerK#d v2@O])FH
当 variant 变量包含 empty 值时,可在表达式中使用它;将其作为 0 或零长度字符串来处理,这要根据表达式来定。
#w%F!H4@C3T%D[1只要将任何值(包括 0、零长度字符串或 null)赋予 variant 变量,empty 值就会消失。而将关键字 empty 赋予 variant 变量,就可将 variant 变量恢复为 empty。
8nf!af,w8QI$z-O1null 值创意公社- ideaer%j#~ ^k/FOH
variant 数据类型还可包含一特定值:null。null通常用于数据库应用程序,表示未知数据或丢失的数据。 由于在数据库中使用 null 方法,null 具有某些唯一的特性:
EB@5Sl7K(kEJ1对包含 null 的表达式,计算结果总是 null。于是说 null 通过表达式“传播”;如果表达式的部分之值为 null,那么整个表达式的值也为 null。
F!C@7rt!`S1
S8t3U}Ot,g Tn1将 null 值、含 null 的 variant 变量或计算结果为 null 的表达式作为参数传递给大多数函数,将会使函数返回 null。创意公社- ideaer%Q5se+[xaA7\)N
创意公社- ideaeriIn%JR#at
null 值经由返回 variant 数据类型的内在函数传播。
:e:J9D%qUcJ.f1也可用 null 关键字指定 null 值。创意公社- ideaer8] MF9u/^3r
z = null
6Z'G\+\#]1@9_#J1也可用 isnull 函数测试 variant 变量是否包含 null 值。创意公社- ideaer AC0J,}.b3Y,Q:HN2B
if isnull (x) and isnull (y) then创意公社- ideaer;ksn&{5L,X#Q(Q
   z = null创意公社- ideaersy$O$J$fU2a$[!_J-b
else创意公社- ideaerBmB {&^1K#UUV z
   z = 0
_R$l^,_8wX${1end if创意公社- ideaerK"d*L2l9_#Z9O|
如果将 null 值赋予 variant 以外的任何其它类型变量,则将出现可以捕获的错误。而将 null 值赋予 variant 则不会发生错误,null 将通过包含 variant 变量的表达式传播(尽管 null 并不通过某些函数来传播)。可以从任何具有 variant 返回值的函数过程返回 null。
BH ONJ1除非明确将 null 赋予变量,否则变量不会设置成 null 值,所以,如果不在应用程序中使用 null,就不必书写测试 null 和处理 null 的程序。创意公社- ideaer?G0AY,y%p
详细信息 关于如何在表达式中使用 null 的详细信息,请参阅语言参考的“null”部分。
'ksh J5@)I+y1error 值创意公社- ideaerNZP]7j
在 variant 中,error 是特定值,指出已发生的过程中的错误状态。但是,与其它类型错误不同,这里并未发生正常的应用程序级的错误处理。因此,程序员或应用程序本身可根据 error 值进行取舍。利用 cverr 函数将实数转换成错误值就可建立 error 值。创意公社- ideaer%WsK!r$j)T;v:Ee
详细信息 关于如何在表达式中使用 error 值,请参阅语言参考中的“cverr 函数”部分。关于错误处理的信息,请参阅“调试代码和处理错误”。有关 variant 数据类型的更详细信息,请参阅《联机手册》中的“高级变量主题”。

9H%V!ki/ES)l5v_8C2y1
顶:17 踩:52
对本文中的事件或人物打分:
当前平均分:-0.81 (194次打分)
对本篇资讯内容的质量打分:
当前平均分:-0.25 (103次打分)
【已经有147人表态】
42票
感动
10票
路过
10票
高兴
15票
难过
17票
搞笑
11票
愤怒
18票
无聊
24票
同情
上一篇 下一篇
发表评论
换一张

网友评论仅供网友表达个人看法,并不表明本网同意其观点或证实其描述。

查看全部回复【已有0位网友发表了看法】