基本数据类型

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

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

集算器中的数据类型

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

Ø  整数

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

Ø  长整数

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

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

 

A

1

=123456789L*1000

2

=123456789*1000

3

=12345678900*10

4

0x00FF

由于普通整数的取值范围是-231~231-1,即-2147483648~2147483647,因此A2中的结果超出了整数的取值范围。而A1中,使用了长整数,取值范围增大为-263~263-1,就可以获得正确结果。A312345678900超出了普通整数的取值范围,会被自动解析为长整数。A4中是十六进制的单元格常数。A1,A2,A3A4中的值如下:

    

A1A3中的计算结果可以发现,在进行某一步运算时,当参与运算的操作数之一为长整数,结果就是长整数。在集算器中,数值类的数据在显示时都会靠右对齐,整数会用蓝色显示,而长整数会用黑色显示。

Ø  浮点数

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) 将得到相同的结果。

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

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

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

Ø  排号

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

 

A

B

1

=k(1111:2)

=A1.len()

2

=A1{1}

=A2.len()

3

=k(1111:4)

=A3.len()

4

=[A3{1},A3{2},A3{3},A3{4}]

=k(0,0,4,87)

5

=A3==B4

=A3==A1

6

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

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

7

=A6<B6

=A6{5,3:4,8}

A1中用k(n:l) 函数生成排号,使用整数1111来生成2个字节的排号数据。可以用k.len()来查看排号数据的字节数,A1B1中的值如下:

 

在查看单元格时,排号数据会显示为对应的整数值,但实际上它和整数类型的数据不同。

k{n}可以取出排号数据的某个字节来生成新的排号数据,A2中取出排号A1的第一个字节构成单字节的排号数据,A2B2中结果如下:

 

A3中,同样用整数1111生成排号数据,但占用4个字节。A4中查看A3各个字节的数据情况。也可以直接用k(ni,…) 指定各个字节的值来生成排号数据。A3B3A4B4中的结果如下:

 

 

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

 

在直接用k(ni,…) 生成排号数据时,注意其中每个字节的值都是整数,最小是0,最大是255,同时最多指定8个字节。A6B6中生成的排号数据如下:

 

尽管作为整数显示时,B6中的数据是负值,但由于排号数据的比较是逐个字节来比较的,因此B6中的排号数据也是比较大的,同时注意,在比较排号数据的大小时,只有字节数相同的数据才能比较,A7中的结果如下:

除了使用k{n}生成单字节的排号之外,还可以用k{a,b:c,d,…},从排号数据k中取出多个字节构成排号数据。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中的结果如下: