类型转换函数

每个函数都将表达式强制转换为特定的数据类型。

语法

  • CBool(表达式
  • CByte(表达式
  • CCur(表达式
  • CDate(表达式
  • CDbl(表达式
  • CDec(表达式
  • CInt(表达式
  • CLng(表达式
  • CLngLng(表达式(只在 64 位平台有效)
  • CLngPtr(表达式
  • CSng(表达式
  • CStr(表达式
  • CVar(表达式

所需的 expression 参数为任何字符串表达式或数值表达式。

返回类型

该函数名称确定了返回类型,如下所示:

功能 返回类型 表达式参数的范围
CBool Boolean 任何有效的“字符串”或数值型表达式。
CByte Byte 0 到 255.
CCur Currency -922,337,203,685,477.5808 到 922,337,203,685,477.5807。
CDate Date 任何有效的日期表达式。
CDbl Double 负值为 -1.79769313486231E308 到 -4.94065645841247E-324;正值为 4.94065645841247E-324 到 1.79769313486232E308。
CDec Decimal 零缩放数(即数字中没有小数位)为 79,228,162,514,264,337,593,543,950,335。 有 28 个小数位的数字的范围为 7.9228162514264337593543950335。 最小的非零数字为 0.0000000000000000000000000001。
CInt Integer -32,768 到 32,767;分数四舍五入。
CLng Long -2,147,483,648 到 2,147,483,647;分数四舍五入。
CLngLng LongLong -9,223,372,036,854,775,808 至 9,223,372,036,854,775,807,分数四舍五入。 (仅在 64 位平台上有效。)
CLngPtr LongPtr 32 位系统上为 -2,147,483,648 到 2,147,483,647,64 位系统上为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807;32 位系统和 64 位系统分数都四舍五入。
CSng Single 负值为 -3.402823E38 到 -1.401298E-45;正值为 1.401298E-45 到 3.402823E38。
CStr String CStr 的返回值取决于 expression 参数。 请参阅下表。
CVar Variant 和“Double”针对数值型的范围相同。 和“字符串”针对非数值型的范围相同。

注解

如果传递给函数的 expression 超出转换目标数据类型的范围,则会发生错误。

注意

转换函数必须用于为更小整型显式分配 LongLong(包括 64 位平台上的 LongPtr)。 不允许“LongLong”到更小的整数的隐式转换。

通常情况下,您可以使用数据类型转换函数对代码进行存档,以演示某些操作的结果应该表示为特定的数据类型而不是默认的数据类型。 例如,使用“CCur”强制实行货币运算,在这种情况下,通常可能发生单精度、双精度或整数运算。

应使用数据类型转换函数代替 Val 以提供从一种数据类型到另一种数据类型的区域设置感知转换。 例如,当您使用“CCur”,便根据您的计算机的区域设置恰当地识别不同的小数分隔符、不同的千位分隔符和不同的货币选项。

当小数部分正好是 0.5 时,“CInt”和“CLng”总是将其四舍五入为最接近的偶数。 例如,0.5 四舍五入为 0,1.5 四舍五入为 2。 CIntCLng 不同于 FixInt 函数,它们截断数字的小数部分,而不是四舍五入。 另外,FixInt 始终返回与传入的类型相同的值。

使用 IsDate 函数来确定是否可以将 date 转换为日期或时间。 CDate 识别日期文本和时间文本以及一些属于可接受日期范围的数字。 当转换数字为日期时,整个数字部分都将被转换为日期。 数字的任何小数部分都将被转换为一天的某个时间(从午夜开始)。

“CDate”根据系统的区域设置识别日期格式。 如果日、月和年的正确顺序是以已识别日期设置之外的格式提供的,那么则可能不能确定日、月和年的正确顺序。 此外,如果长日期格式还包含了星期几字符串,则不能识别该格式。

还提供了 CVDate 函数,以便与旧版 Visual Basic 兼容。 CVDate 函数的语法和 CDate 函数的语法一致,但是 CVDate 返回其子类型为 Date 而不是实际 Date 类型的 Variant。 由于现在存在内部 Date 类型,因此不再需要 CVDate。 通过将表达式转换为 Date,然后将其分配给某个 Variant,能获得相同的效果。 此技术与所有其他内部类型到其对等的“变量”子类型的转换一致。

注意

“CDec”函数不返回离散数据类型;反而,它总是返回其值已转换为“小数”子类型的“变量”

CStr 的返回取决于表达式参数。

如果表达式 CStr 返回
Boolean 包含 TrueFalse 的字符串。
Date 包含系统的短日期格式的日期的字符串。
Empty 零长度字符串 ("")。
Error 包含后跟错误编号的单词 Error 的字符串。
NULL 运行时错误
其他数字 包含数字的字符串。

CBool 函数示例

本示例使用 CBool 函数将表达式转换为 Boolean。 如果该表达式计算结果为非零值,则 CBool 将返回 True,否则,返回 False

Dim A, B, Check 
A = 5: B = 5 ' Initialize variables. 
Check = CBool(A = B) ' Check contains True. 
 
A = 0 ' Define variable. 
Check = CBool(A) ' Check contains False. 

CByte 函数示例

本示例使用 CByte 函数将表达式转换为 Byte

Dim MyDouble, MyByte 
MyDouble = 125.5678 ' MyDouble is a Double. 
MyByte = CByte(MyDouble) ' MyByte contains 126. 

CCur 函数示例

本示例使用 CCur 函数将表达式转换为 Currency

Dim MyDouble, MyCurr 
MyDouble = 543.214588 ' MyDouble is a Double. 
MyCurr = CCur(MyDouble * 2) ' Convert result of MyDouble * 2 
 ' (1086.429176) to a 
 ' Currency (1086.4292). 

CDate 函数示例

此示例使用“CDate”函数将字符串转换为“日期”。 通常情况下,不建议硬编码日期和时间为字符串(如此示例中所示)。 改用日期文本和时间文本,如 #2/12/1969##4:45:23 PM#

Dim MyDate, MyShortDate, MyTime, MyShortTime 
MyDate = "February 12, 1969" ' Define date. 
MyShortDate = CDate(MyDate) ' Convert to Date data type. 
 
MyTime = "4:35:47 PM" ' Define time. 
MyShortTime = CDate(MyTime) ' Convert to Date data type. 

CDbl 函数示例

本示例使用 CDbl 函数将表达式转换为 Double

Dim MyCurr, MyDouble 
MyCurr = CCur(234.456784) ' MyCurr is a Currency. 
MyDouble = CDbl(MyCurr * 8.2 * 0.01) ' Convert result to a Double. 

CDec 函数示例

本示例使用 CDec 函数将数值转换为 Decimal

Dim MyDecimal, MyCurr 
MyCurr = 10000000.0587 ' MyCurr is a Currency. 
MyDecimal = CDec(MyCurr) ' MyDecimal is a Decimal. 

CInt 函数示例

本示例使用 CInt 函数将值转换为 Integer

Dim MyDouble, MyInt 
MyDouble = 2345.5678 ' MyDouble is a Double. 
MyInt = CInt(MyDouble) ' MyInt contains 2346. 

CLng 函数示例

本示例使用 CLng 函数将值转换为 Long

Dim MyVal1, MyVal2, MyLong1, MyLong2 
MyVal1 = 25427.45: MyVal2 = 25427.55 ' MyVal1, MyVal2 are Doubles. 
MyLong1 = CLng(MyVal1) ' MyLong1 contains 25427. 
MyLong2 = CLng(MyVal2) ' MyLong2 contains 25428. 

CSng 函数示例

本示例使用 CSng 函数将值转换为 Single

Dim MyDouble1, MyDouble2, MySingle1, MySingle2 
' MyDouble1, MyDouble2 are Doubles. 
MyDouble1 = 75.3421115: MyDouble2 = 75.3421555 
MySingle1 = CSng(MyDouble1) ' MySingle1 contains 75.34211. 
MySingle2 = CSng(MyDouble2) ' MySingle2 contains 75.34216. 

CStr 函数示例

本示例使用 CStr 函数将数值转换为 String

Dim MyDouble, MyString 
MyDouble = 437.324 ' MyDouble is a Double. 
MyString = CStr(MyDouble) ' MyString contains "437.324". 


CVar 函数示例

本示例使用 CVar 函数将表达式转换为 Variant

Dim MyInt, MyVar 
MyInt = 4534 ' MyInt is an Integer. 
MyVar = CVar(MyInt & 000) ' MyVar contains the string 
 ' 4534000. 

另请参阅

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。