类型自动转换(Crystal 语法)

一般情况下,在 Crystal Reports 中若没有明确提供类型转换函数,则无法在期待某一类型值的位置使用另一类型的值。例如:

Local StringVar postalCode;
//错误 - 给字符串赋以数字值。
postalCode := 10025;
//正确 - 使用类型转换函数 CStr 创建“10025”。
postalCode := CStr (10025, 0);

但是,有几种转换已可以自动进行:

  • 数字到货币
  • 日期到日期时间
  • 简单类型到同一基础简单类型的范围值

例如,以下赋值是正确的:

Local CurrencyVar cost;
//等同于: cost := $10
cost := 10;
Local DateTimeVar orderDate;
//等同于: orderDate := CDateTime (1999, 9, 23, 0, 0, 0)
orderDate := CDate (1999, 9, 23);
Local NumberVar Range aRange;
//等同于: aRange := 20 To 20
aRange := 20;
Local NumberVar Range Array aRangeArray;
//等同于: aRangeArray := [10 To 10, 20 To 25, 2 To 2]
aRangeArray := [10, 20 To 25, 2];
Note注意

不允许反向转换。例如:

Local NumberVar num;
num := 5 + $10;
//正确 - 使用 CDbl 函数转换为数字类型
num := CDbl (5 + $10)

5 转换为 $5 然后与 $10 相加得到 $15。但是,无法自动将该货币型值赋给数字型变量 num,因为不允许从货币型自动转换到数字型。同样,数字型参数可以提供给接受货币型参数的函数,并且数字型参数将转换为货币型,而在没有首先使用 CDbl 将货币型显式转换为数字型的情况下,货币型参数就无法提供给接受数字型参数的函数。