Difference between revisions of "ZH/Documentation/BASIC Guide/Conversion Functions (Runtime Library)"
Line 3: | Line 3: | ||
|ShowPrevNext=block | |ShowPrevNext=block | ||
|ShowPrevPage=block | |ShowPrevPage=block | ||
− | |PrevPage=Documentation/BASIC Guide/Runtime Library | + | |PrevPage=ZH/Documentation/BASIC Guide/Runtime Library |
− | |NextPage=Documentation/BASIC Guide/Strings (Runtime Library) | + | |NextPage=ZH/Documentation/BASIC Guide/Strings (Runtime Library) |
|runtime=block | |runtime=block | ||
}} | }} | ||
Line 161: | Line 161: | ||
{{PDL1}} | {{PDL1}} | ||
+ | {{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Conversion Functions (Runtime Library)}} | ||
{{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Conversion Functions (Runtime Library)}} | {{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Conversion Functions (Runtime Library)}} |
Revision as of 22:06, 12 December 2008
在很多情况下,必须将一种类型的变量转换为另一种类型的变量。
隐式和显式类型转换
要将变量从一种类型更改为另一种类型,最简便的方法是使用赋值。
Dim A As String Dim B As Integer B = 101 A = B
在此示例中,变量 A 是一个字符串,变量 B 是一个整数。Apache OpenOffice Basic 可确保在给变量 A 赋值时,将变量 B 转换为字符串。这种转换看似简单,其实非常复杂:整数 B 以双字节长整型数字形式保留在工作内存中。另一方面,A 是一个字符串,计算机为每个字符(每个数字)保存一个单字节或双字节长整型值。因此,在将 B 中的内容复制到 A 之前,必须将 B 转换为 A 的内部格式。
与大多数其他编程语言不同,Basic 自动执行类型转换。不过,这可能会带来致命的后果。经过仔细检查,以下代码序列
Dim A As String Dim B As Integer Dim C As Integer B = 1 C = 1 A = B + C
乍看上去非常简单,但最终却发现其中暗藏陷阱。Basic 解释器先计算加法过程的结果,然后将该结果转换为字符串,从而生成字符串 2。
另一方面,如果 Basic 解释器先将起始值 B 和 C 转换为字符串,并将加法运算符应用于该结果,则会生成字符串 11。
这也适用于使用变体变量的情况:
Dim A Dim B Dim C B = 1 C = "1" A = B + C
由于变体变量可以包含数字和字符串,因此,不能确定是将数字 2 还是字符串 11 赋给变量 A。
要避免因隐式类型转换而导致的错误来源,必须以一种严谨的方式编写程序;例如,不使用变体数据类型。
为避免隐式类型转换产生的其他错误,Apache OpenOffice Basic 提供了一系列转换函数,可使用这些函数定义何时应转换运算的数据类型:
- CStr(Var)
- 将任何数据类型转换为字符串。
- CInt(Var)
- 将任何数据类型转换为整数值。
- CLng(Var)
- 将任何数据类型转换为长整型值。
- CSng(Var)
- 将任何数据类型转换为单精度值。
- CDbl(Var)
- 将任何数据类型转换为双精度值。
- CBool(Var)
- 将任何数据类型转换为布尔值。
- CDate(Var)
- 将任何数据类型转换为日期值。
可以使用这些转换函数定义 Apache OpenOffice Basic 应如何执行这些类型转换操作:
Dim A As String Dim B As Integer Dim C As Integer B = 1 C = 1 A = CStr(B + C) ' B and C are added together first, then ' converted to the string "2" A = CStr(B) + CStr(C) ' B and C are converted into a string,then ' combined to produce the string "11"
在该示例中的第一个加法运算中,Apache OpenOffice Basic 先将整型变量相加,然后将结果转换为字符串。将为 A 赋值字符串 2。在第二个实例中,先将整型变量转换为两个字符串,然后通过赋值将其彼此链接在一起。因此,将为 A 赋值字符串 11。
CSng 和 CDbl 数值转换函数也接受小数。必须使用相应的特定于国家/地区的设置中定义的符号作为小数点符号。相反,在设置数字、日期和时间详细信息的格式时,CStr 方法使用当前选定的特定于国家/地区的设置。
Val 函数不同于 Csng、Cdbl 和 Cstr 方法。它将字符串转换为数字;不过,它始终要求将句点用作小数点符号。
Dim A As String Dim B As Double A = "2.22" B = Val(A) ' Is converted correctly regardless of the ' country-specific settings
检查变量内容
在某些情况下,无法转换日期:
Dim A As String Dim B As Date A = "test" B = A ' Creates error message
在所示的示例中,将 test 字符串赋给日期变量没有任何意义,因此,Basic 解释器将会报告错误。这也适用于尝试将字符串赋给布尔变量的情况:
Dim A As String Dim B As Boolean A = "test" B = A ' Creates error message
Basic 解释器同样会报告错误。
在赋值之前,通过检查程序以确定要赋值的变量内容与目标变量类型是否匹配,可以避免出现这些错误消息。鉴于此目的,Apache OpenOffice Basic 提供了以下测试函数:
- IsNumeric(Value)
- 检查值是否为数字。
- IsDate(Value)
- 检查值是否为日期。
- IsArray(Value)
- 检查值是否为数组。
在查询用户输入时,这些函数尤其有用。例如,可以检查用户键入的数字或日期是否有效。
If IsNumeric(UserInput) Then ValidInput = UserInput Else ValidInput = 0 MsgBox "Error message." End If
在上一示例中,如果 UserInput 变量包含有效的数字值,则将其赋给 ValidInput 变量。如果 UserInput 不包含有效数字,则将值 0 赋给 ValidInput 并返回错误消息。
虽然 Apache OpenOffice Basic 中提供了用于检查数字、日期详细信息和数组的测试函数,但未提供用于检查布尔值的相应函数。不过,可以使用 IsBoolean 函数模拟此功能:
Function IsBoolean(Value As Variant) As Boolean On Error Goto ErrorIsBoolean: Dim Dummy As Boolean Dummy = Value IsBoolean = True On Error Goto 0 Exit Sub ErrorIsBoolean: IsBoolean = False On Error Goto 0 End Function
IsBoolean 函数定义了一个内部布尔型 Dummy 帮助变量,并尝试将传送的值赋给该变量。如果赋值成功,该函数将返回 True。如果失败,则会产生运行时错误,从而终止测试函数以返回错误。
Content on this page is licensed under the Public Documentation License (PDL). |