基本数据类型

阅读(20030) 标签: 数据类型, 判断,

本章节介绍集算器中支持的数据类型及判断数据类型涉及到的函数。

集算器中的数据类型

在集算器中,有以下几种基本数据类型:

Ø  整数

32位整数,即-231~231-1之间的整数,其取值范围-2147483648~2147483647,可用类型转换函数int()将其它类型数据转换为32位整数。

Ø  长整数

64位整数,即-263~263-1之间的整数,比整数类型的取值范围更大,可用类型转换函数long()将其它类型数据转换为长整数。

特别的,可以在整数后面添加大写的L表示长整数,长整数与整数相比有更大的取值范围;还可以用0x开头的串来表示十六进制的长整数:

 

A

1

123456789

2

123456789L

3

12345678900

4

0x00FF

由于普通整数的取值范围是-231~231-1,即-2147483648~2147483647,因此A1中的数值为整数,A2中在整数后面添加了L,则会被识别为长整数。A312345678900超出了普通整数的取值范围,会被自动解析为长整数。A4中是十六进制的单元格常数。A1,A2,A3A4中的值如下:

    

在集算器中,数值类的数据在显示时都会靠右对齐,整数会用蓝色显示,而长整数会用黑色显示。

Ø  浮点数

64位浮点数,这是集算器中最常用的数据类型,涉及小数的运算基本都是用它来计算的,可用类型转换函数float()将其它类型数据转换为浮点数。由于浮点数是用二进制规则存储数据的,因此在计算中有可能出现误差。

 

A

1

43.41

2

-4.45E13

3

3%

4

=float(54)

A1,A2,A3A4中的值如下:

    

其中,A2中为用科学计数法表示的浮点数;A3中为百分数表示的浮点数,百分数的这种写法只能作为常数使用,而不能用在表达式中。如上面所示,浮点数在集算器中会显示为深粉色。

Ø  长实数

长实数可以无误差地存储任何十进制实数,但是使用长实数计算时,需要消耗更多的内存,且计算的效率较低。可用类型转换函数decimal()将其它类型数据(如字符串)转换为长实数。

 

A

1

5.2

2

=A1*A1

3

=decimal("5.2")

4

=A3*A3

A1中为浮点数5.2A3中将字符串"5.2"转换为长实数。A2A4中计算的结果如下:

 

可以看到,由于采用二进制处理,因此浮点数的运算可能造成精度误差,而长实数的计算没有这种情况。长实数运算后的结果仍然是长实数,在集算器中,长实数将显示为红色。

Ø  实数

实数包括整数、长整数、浮点数、长实数这四种类型,可用类型转换函数number()将其它类型数据转换为实数。

Ø  布尔型

包括true/false

 

A

1

true

2

false

3

=4>2

4

=13%3==0

A1,A2,A3A4中的结果如下:

    

Ø  字符串

在使用表达式时,用双引号括起来,其中转义字符用\。而在直接定义字符串常量时,不用引号,还可以用函数string()将其它类型的数据转换为字符串。在表达式中计算两个字符串xy合并,可以在之间添加空格x y。在将两个字符串合并时,也可以直接用加法,写作x+y,但是此时xy必须均为字符串,如果其中之一为实数,结果即为实数而不是字符串。如果需要将实数作为字符串,与其它字符串连接,可以用x/y,来计算,此时如果xy其中之一为字符串,结果即为字符串。

字符串转义规则与JAVA相同,可参考使用手册。

 

A

1

Amy

2

="State:\tTX"

3

="Texas" "Dallas"

4

=A1+3.14

5

=A1/3.14

A1,A2,A3,A4A5中的结果如下:

  

 

Ø  日期/时间

写成yyyy-mm-ddhh:mm:ss形式。可以用类型转换函数date()time()datetime()将字符串或者长整数转换为日期,时间或者日期时间类型。

 

A

1

2014-10-5

2

22:15:30

3

=date("2014" "-10" "-5")

A1,A2A3中的结果如下:

   

其中,A3中的date函数除了可以将字符串转换为日期外,也可以直接设定日期的年月日,如改写为date(2014,10,5) 将得到相同的结果。

集算器中,布尔型、字符串及日期时间数据,都会靠左对齐,显示为黑色。

可以在菜单栏的工具选项中,点击选项按钮,在环境选项卡中,设定时间/日期数据的格式,以及字符编码等。

注意,当把数据转换为其它类型时,有可能会丢失精度。

Ø  排号

排号类型的数据类似整数,却是按字节来存储的,并可以指定其存储时所占用的字节数,排号数据目前只允许使用16个字节,即128位。排号类型的数据通常可以用作表的键值,只能进行比较,而不能参与其它计算。排号类型的数据在比较时并不是直接比较整数值,而是逐个字节来比较大小。

 

A

B

1

=k(1111:2)

 

2

=A1.sbs(1)

 

3

=k(1111:4)

 

4

=[A3.sbs(1),A3.sbs(2),A3.sbs(3),A3.sbs(4)]

=k(0,0,4,87)

5

=A3==B4

=A3==A1

6

=k(111,0,0,4,0,0,0,87,0,87)

=k(133,255,0,128,0,0,0,0)

7

=A6<B6

=k(A6.sbs(5), A6.sbs(3:4):2, A6.sbs(8))

A1中用k(ni: li) 函数生成排号,后面的长度代表整数所占用的字节数,如A1中使用整数1111来生成2个字节的排号数据,值如下:

在查看单元格时,排号数据会逐位显示为16进制模式。A11111占用2个字节,每个字节会显示为216进制数字,1111对应16进制的0457

k.sbs(n)可以取出排号数据的某个字节构成的整数,A2中取出排号A1的第一个字节构成的整数,这里第1个字节的16进制数为04,转换为10进制的整数如下:

A3中,同样用整数1111生成排号数据,但占用4个字节。A4中查看A3各个字节的数据情况。也可以直接用k(ni,…) 指定多个字节的值来生成排号数据,如果不设参数li,表示每个整数依次只对应1个字节。A3A4B4中的结果如下:

 

比较A3A1中的结果,由于这里设置的1111占用4个字节,因此显示为16进制是8个数字的00000457。其中,第4个字节在16进制中为57,转换为10进制为87,正如A4的结果中所示。B4中按单字节设置排号,结果和A3是相同的。

A5B5中,用A3中的排号与B4A1中的排号作对比,可以发现,B4中生成的排号与A3中是相同的,而不同长度的排号数据,即使显示的值相同,也是不同的排号数据。A5B5中的比较结果如下:

 

在直接用k(ni,…) 生成排号数据时,注意其中每个字节的值都是整数,最小是0,最大是255,同时最多指定16个字节,由于单字节数据的取值范围是0~255,所以只有这个范围内的设置才是正常的,超过这个范围ni只有最后一个字节对应数据有效。A6B6中生成的排号数据如下:

 

由于排号数据的比较是逐个字节来比较的,因此B6中的排号数据是比较大的。同时注意,排号数据都是16个字节,比较时会依次比较,与定义时指定了几个字节值并没有关系。本例中A6定义了10个字节,A7中定义了8个,仍然是可以比较的,A7中的结果如下:

除了使用k(n,…)生成指定各字节值的排号之外,还可以用k(n:l,…),依次指定一个或多个字节构成排号数据。B7中生成的数据如下:

实际上,B7中的表达式和B4中的表达式k(0,0,4,87) 作用是类似的,只不过中间两个字节的数据是同时指定的,而且数据都是A6的排号中获取的。

 

数据类型的判断

可以用下面几个函数判断数据的类型:

Ø  ifnumber(x)

判断x是否是实数

Ø  ifstring(x)

判断x是否是字符串

Ø  ifdate(x)

判断x是否是日期类型或日期时间类型

Ø  iftime(x)

判断x是否是时间类型

 

A

1

=ifnumber(3.5)

2

=ifstring(now())

A1中,3.5是浮点数,属于实数。A2now()函数计算当前日期时间,结果不是字符串。A1A2中的结果如下: