类型转换函数 (Visual Basic)

这些函数采用内联方式编译,即转换代码是计算表达式的代码的一部分。有时实现该转换时不需要调用某个过程,这将提高性能。每个函数都将表达式强制转换为一种特定的数据类型。

CBool(expression)
CByte(expression)
CChar(expression)
CDate(expression)
CDbl(expression)
CDec(expression)
CInt(expression)
CLng(expression)
CObj(expression)
CSByte(expression)
CShort(expression)
CSng(expression)
CStr(expression)
CUInt(expression)
CULng(expression)
CUShort(expression)

组成部分

  • expression
    必选。源数据类型的任何表达式。

返回值数据类型

函数名确定它返回的值的数据类型,如下表所示。

函数名

返回数据类型

expression 参数范围

CBool

Boolean 数据类型 (Visual Basic)

任何有效的 Char、String 或数值表达式。

CByte

Byte 数据类型 (Visual Basic)

0 到 255(无符号);舍入小数部分。1

CChar

Char 数据类型 (Visual Basic)

任何有效的 Char 或 String 表达式;只转换 String 的第一个字符;值可以为 0 到 65535(无符号)。

CDate

Date 数据类型 (Visual Basic)

任何有效的日期和时间表示法。

CDbl

Double 数据类型 (Visual Basic)

负值取值范围为 -1.79769313486231570E+308 到 -4.94065645841246544E-324;正值取值范围为 4.94065645841246544E-324 到 1.79769313486231570E+308。

CDec

Decimal 数据类型 (Visual Basic)

对于零变比数值,即无小数位数值,为 +/-79,228,162,514,264,337,593,543,950,335。对于具有 28 位小数位的数字,范围是 +/-7.9228162514264337593543950335。最小的可用非零数是 0.0000000000000000000000000001 (+/-1E-28)。

CInt

Integer 数据类型 (Visual Basic)

-2,147,483,648 到 2,147,483,647;舍入小数部分。1

CLng

Long 数据类型 (Visual Basic)

-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807;舍入小数部分。1

CObj

Object 数据类型

任何有效的表达式。

CSByte

SByte 数据类型 (Visual Basic)

-128 到 127;舍入小数部分。1

CShort

Short 数据类型 (Visual Basic)

-32,768 到 32,767;舍入小数部分。1

CSng

Single 数据类型 (Visual Basic)

负值的取值范围为 -3.402823E+38 到 -1.401298E-45;正值的取值范围为 1.401298E-45 到 3.402823E+38。

CStr

String 数据类型 (Visual Basic)

CStr 的返回值取决于 expression 参数。请参见 返回 CStr 函数的值 (Visual Basic)

CUInt

UInteger 数据类型

0 到 4,294,967,295(无符号);舍入小数部分。1

CULng

ULong 数据类型 (Visual Basic)

0 到 18,446,744,073,709,551,615(无符号);舍入小数部分。1

CUShort

UShort 数据类型 (Visual Basic)

0 到 65,535(无符号);舍入小数部分。1

1 小数部分可能要进行称为“四舍六入五成双”的特殊类型舍入。有关更多信息,请参见“备注”。

备注

通常,在 Convert 类或在独立类型结构或类中,应优先使用 Visual Basic 类型转换函数,其次使用 .NET Framework 方法(例如 ToString())。Visual Basic 函数设计用于优化与 Visual Basic 代码之间的交互,并且这些函数使源代码更简短、更易阅读。另外,.NET Framework 转换方法产生的结果不一定与 Visual Basic 函数产生的结果相同,例如当将 Boolean 转换为 Integer 的时候。有关更多信息,请参见 数据类型疑难解答 (Visual Basic)

行为

  • **强制转换。**通常,可以使用数据类型转换函数将运算结果强制转换为某一特定数据类型而非默认数据类型。例如,在通常发生单精度、双精度或整型运算的情况下,使用 CDec 强制执行小数运算。

  • **转换失败。**如果传递给函数的 expression 超出要转换成的数据类型的范围,将发生 OverflowException

  • **小数部分。**将一个非整数值转换为整型时,整数转换函数(CByte、CInt、CLng、CSByte、CShort、CUInt、CULng 和 CUShort)将移除小数部分,并将该值舍入为最接近的整数。

    如果小数部分正好是 0.5,整数转换函数将其舍入为最接近的偶数整数。例如,将 0.5 舍入为 0,并同时将 1.5 和 2.5 舍入为 2。这有时称为“四舍六入五成双”,其目的是弥补在将许多这样的数字相加时可能会累积的偏量。

    CInt 和 CLng 与 IntFix 函数不同,这些函数截断而不是舍入一个数字的小数部分。此外,Fix 和 Int 总是返回与传入的数据类型相同的值。

  • **日期/时间转换。**使用 IsDate 函数确定是否可以将一个值转换为日期和时间。CDate 能够识别日期文本和时间文本,但不能识别数值。若要将 Visual Basic 6.0 Date 值转换为 Visual Basic 2005 或更高版本中的 Date 值,可以使用 DateTime.FromOADate 方法。

  • 中性日期/时间值。Date 数据类型 (Visual Basic) 始终包含日期和时间信息。为进行类型转换,Visual Basic 将 1/1/0001(公元 1 年 1 月 1 日)作为日期的“中性值”,将 00:00:00(午夜)作为时间的中性值。如果将 Date 值转换为字符串,CStr 的结果字符串中将不包含中性值。例如,如果将 #January 1, 0001 9:30:00# 转换为字符串,结果为“9:30:00 AM”;日期信息被删除了。但是,原始的 Date 值中仍包含该日期信息,并且可通过某些函数(如 DatePart 函数)恢复该日期信息。

  • **区域差异。**涉及字符串的类型转换函数根据应用程序的当前区域设置进行转换。例如,CDate 依据系统的区域设置来识别日期的格式。必须以正确的顺序为区域设置提供日、月、年数据,否则可能无法正确解释日期。系统无法识别包含星期几的字符串(如“Wednesday”)的长日期格式。

    如果需要以区域设置指定的格式之外的格式在值的字符串表示形式之间转换,则不能使用 Visual Basic 类型转换函数。如果进行转换,请使用该值类型的 ToString(IFormatProvider) 方法和 Parse(String, IFormatProvider) 方法。例如,将字符串转换为 Double 时,使用 Double.Parse,将 Double 类型的值转换为字符串时,使用 Double.ToString

CType 函数

CType 函数采用第二个参数 typename,并且将 expression 强制转换为 typename,其中 typename 可以是存在有效转换的任何数据类型、结构、类或接口。

有关 CType 与其他类型转换关键字的比较,请参见 DirectCast 运算符 (Visual Basic)TryCast 运算符 (Visual Basic)

CBool 示例

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

Dim a, b, c As Integer
Dim check As Boolean
a = 5
b = 5
' The following line of code sets check to True.
check = CBool(a = b)
c = 0
' The following line of code sets check to False.
check = CBool(c)

CByte 示例

下面的示例使用 CByte 函数将表达式转换为 Byte。

Dim aDouble As Double
Dim aByte As Byte
aDouble = 125.5678
' The following line of code sets aByte to 126.
aByte = CByte(aDouble)

CChar 示例

下面的示例使用 CChar 函数将 String 表达式的第一个字符转换为 Char 类型。

Dim aString As String
Dim aChar As Char
' CChar converts only the first character of the string.
aString = "BCD"
' The following line of code sets aChar to "B".
aChar = CChar(aString)

CChar 的输入参数必须是 Char 或 String 数据类型。由于 CChar 不能接受数值数据类型,因此无法使用 CChar 将数字转换为字符。下面的示例获取一个表示码位(字符代码)的数字,然后将其转换为对应的字符。它使用 InputBox 函数获取数字字符串,并使用 CInt 将该字符串转换为 Integer 类型,然后使用 ChrW 将该数字转换为 Char 类型。

Dim someDigits As String
Dim codePoint As Integer
Dim thisChar As Char
someDigits = InputBox("Enter code point of character:")
codePoint = CInt(someDigits)
' The following line of code sets thisChar to the Char value of codePoint.
thisChar = ChrW(codePoint)

CDate 示例

下面的示例使用 CDate 函数将字符串转换为 Date 值。通常,建议不要使用硬编码的日期和时间作为字符串(如下例所示)。而应使用日期文本和时间文本,如 #Feb 12、1969# 和 #4:45:23 PM#。

Dim aDateString, aTimeString As String
Dim aDate, aTime As Date
aDateString = "February 12, 1969"
aTimeString = "4:35:47 PM"
' The following line of code sets aDate to a Date value.
aDate = CDate(aDateString)
' The following line of code sets aTime to Date value.
aTime = CDate(aTimeString)

CDbl 示例

Dim aDec As Decimal
Dim aDbl As Double
' The following line of code uses the literal type character D to make aDec a Decimal.
aDec = 234.456784D
' The following line of code sets aDbl to 1.9225456288E+1.
aDbl = CDbl(aDec * 8.2D * 0.01D)

CDec 示例

下面的示例使用 CDec 函数将一个数值转换为 Decimal。

Dim aDouble As Double
Dim aDecimal As Decimal
aDouble = 10000000.0587
' The following line of code sets aDecimal to 10000000.0587.
aDecimal = CDec(aDouble)

CInt 示例

下面的示例使用 CInt 函数将一个值转换为 Integer。

Dim aDbl As Double
Dim anInt As Integer
aDbl = 2345.5678
' The following line of code sets anInt to 2346.
anInt = CInt(aDbl)

CLng 示例

下面的示例使用 CLng 函数将多个值转换为 Long。

Dim aDbl1, aDbl2 As Double
Dim aLng1, aLng2 As Long
aDbl1 = 25427.45
aDbl2 = 25427.55
' The following line of code sets aLng1 to 25427.
aLng1 = CLng(aDbl1)
' The following line of code sets aLng2 to 25428.
aLng2 = CLng(aDbl2)

CObj 示例

下面的示例使用 CObj 函数将一个数值转换为 Object。Object 变量本身只包含一个四字节的指针,该指针指向赋给该变量的 Double 值。

Dim aDouble As Double
Dim anObject As Object
aDouble = 2.7182818284
' The following line of code sets anObject to a pointer to aDouble.
anObject = CObj(aDouble)

CSByte 示例

下面的示例使用 CSByte 函数将一个数值转换为 SByte。

Dim aDouble As Double
Dim anSByte As SByte
aDouble = 39.501
' The following line of code sets anSByte to 40.
anSByte = CSByte(aDouble)

CShort 示例

下面的示例使用 CShort 函数将一个数值转换为 Short。

Dim aByte As Byte
Dim aShort As Short
aByte = 100
' The following line of code sets aShort to 100.
aShort = CShort(aByte)

CSng 示例

下面的示例使用 CSng 函数将多个值转换为 Single。

Dim aDouble1, aDouble2 As Double
Dim aSingle1, aSingle2 As Single
aDouble1 = 75.3421105
aDouble2 = 75.3421567
' The following line of code sets aSingle1 to 75.34211.
aSingle1 = CSng(aDouble1)
' The following line of code sets aSingle2 to 75.34216.
aSingle2 = CSng(aDouble2)

CStr 示例

下面的示例使用 CStr 函数将一个数值转换为 String。

Dim aDouble As Double
Dim aString As String
aDouble = 437.324
' The following line of code sets aString to "437.324".
aString = CStr(aDouble)

下面的示例使用 CStr 函数将 Date 值转换为 String 值。

Dim aDate As Date
Dim aString As String
' The following line of code generates a COMPILER ERROR because of invalid format.
' aDate = #February 12, 1969 00:00:00#
' Date literals must be in the format #m/d/yyyy# or they are invalid.
' The following line of code sets the time component of aDate to midnight.
aDate = #2/12/1969#
' The following conversion suppresses the neutral time value of 00:00:00.
' The following line of code sets aString to "2/12/1969".
aString = CStr(aDate)
' The following line of code sets the time component of aDate to one second past midnight.
aDate = #2/12/1969 12:00:01 AM#
' The time component becomes part of the converted value.
' The following line of code sets aString to "2/12/1969 12:00:01 AM".
aString = CStr(aDate)

CStr 始终以符合当前区域设置的标准短格式呈现 Date 值,如“6/15/2003 4:35:47 PM”。但是,CStr 会取消日期的“中性值”1/1/0001 和时间的“中性值”00:00:00。

有关由 CStr 返回的值的详细信息,请参见 返回 CStr 函数的值 (Visual Basic)

CUInt 示例

下面的示例使用 CUInt 函数将一个数值转换为 UInteger。

Dim aDouble As Double
Dim aUInteger As UInteger
aDouble = 39.501
' The following line of code sets aUInteger to 40.
aUInteger = CUInt(aDouble)

CULng 示例

下面的示例使用 CULng 函数将一个数值转换为 ULong。

Dim aDouble As Double
Dim aULong As ULong
aDouble = 39.501
' The following line of code sets aULong to 40.
aULong = CULng(aDouble)

CUShort 示例

下面的示例使用 CUShort 函数将一个数值转换为 UShort。

Dim aDouble As Double
Dim aUShort As UShort
aDouble = 39.501
' The following line of code sets aUShort to 40.
aUShort = CUShort(aDouble)

请参见

参考

Conversion 函数 (Visual Basic)

Asc

AscW

Chr

ChrW

Int

Fix

Format

Hex

Oct

Str

Val

其他资源

Visual Basic 中的类型转换