跳到主要内容
版本:release

数值类型(bool,int->(enum),float)

GS中的bool有两种取值,true和false;int和float都是64位(8字节)。

bool

bool更多用于条件判断语句中,其基本用法如下:

bool flag;      // flag = false
flag = true; // flag = true

int

其中int支持十进制、二进制、八进制和十六进制读入,如下:

int val = 18;               // 四个式子等价,val的值都是18
int val = 0b10010 // 二进制使用 0b 开头
int val = 022; // 八进制使用 0 开头
int val = 0x12; // 十六进制使用 0x 开头

int常用的外部函数

下面列出int类型一些常用的外部函数以及用法。

1. int转成string

函数原型:
string int_instance.to_string()
使用方法:
int val = 1024;
string str = val.to_string(); // str = "1024"

2. string转成int

函数原型:
int int.parse(string str)
使用方法:
string str = "1024";
int val = int.parse(str); // val = 1024

3. 判断是否为int

函数原型:
bool is_int(mixed val)
使用方法:
int val = 1024;
bool flag = is_int(val); // flag = true

4. 判断是否为字母

函数原型:
bool int_instance.is_alpha()
使用方法:
int val = 'a';
bool flag = val.is_alpha(); // flag = true

5. 判断是否是汉字

函数原型:
bool int_instance.is_chinese()
使用方法:
int val = '是';
bool flag = val.is_chinese(); // flag = true

6. 判断是否是字符型数字: '0'~'9'

函数原型:
bool int_instance.is_digit()
使用方法:
int val = '0';
bool flag = val.is_digit(); // flag = true

7. 判断是否是小写字母

函数原型:
bool int_instance.is_lower()
使用方法:
int val = 'a';
bool flag = val.is_lower(); // flag = true

8. 判断是否是大写字母

函数原型:
bool int_instance.is_upper()
使用方法:
int val = 'A';
bool flag = val.is_upper(); // flag = true

9. 判断是否是十六进制字符: '0'~'9','a'~'f','A'~'F'

函数原型:
bool int_instance.is_xdigit()
使用方法:
int val = 'A';
bool flag = val.is_xdigit(); // flag = true

10. int转成字符: 10~15 to 'A'~'F'

函数原型:
int int_instance.to_xdigit()
使用方法:
int val = 10;
int char = val.to_xdigit(); // char = 65 ('A'的ASCII码)

11. 字符转成int: '0'~'9','A'~'F' to 0~15

函数原型:
int int_instance.from_xdigit()
使用方法:
int char = 'A';
int val = char.from_xdigit(); // val = 10

12. 小写字母转成大写字母

函数原型:
int int_instance.to_upper()
使用方法:
int char_lower = 'a';
int char_upper = char_lower.to_upper(); // char_upper = 65

13. 大写字母转成小写字母

函数原型:
int int_instance.to_lower()
使用方法:
int char_upper = 'A';
int char_lower = char_upper.to_lower(); // char_lower = 97

条件判断语句中,int类型中除了0为false之外其它都为true。

float

float表示64位的浮点数,其只支持十进制读入,其用法如下

float pi = 3.14;

注意:任意两个类型之间的转换都需要强制类型转换。

int val = 3.14;             // 错误
int val = (int)3.14; // 正确
float pi = 3; // 错误
float pi = 3f; // 正确
float pi = (float)3; // 正确

运算可能会产生类型为 float 的 nan 或 inf

nan: not a number,表示“无效数字”。 nan是无序的,当对其进行逻辑运算时其不大于、小于或等于任何数,包括它自己。如果数学表达式中含有nan,那么数学表达式的结果为nan。

nan的产生情概况基本分成以下三类:

  • 浮点数除法的 0.0 / 0.0 ,无论正负,两个数中有一个为浮点数
  • 无意义的数学操作函数,如math.acos(-2) , math.sin(-2), math.log(-2) 等
  • 部分 inf 运算, 如 inf - inf , inf / inf, 0 * inf

inf:infinite,表示“无穷大”。+inf 大于任何数字(除了它自己和nan), -inf小于任何数字(除了它自己和nan) , +inf 与 -inf 互为负数(但 -inf / inf 结果为 nan ) ,得到inf是需要查看是否有溢出或者除以0的情况。

inf的产生情况也是三类:

  • 浮点数除法 1.0 /0.0 , 即非零数字除以0,两个数中有一个为浮点数
  • 部分数学操作函数产生,如 log(0)
  • 部分 inf 运算, 如 0 + inf inf -(-inf) -inf - inf等

以下为产生 nan 与 inf 的部分样例:


//nan 产生的部分情况如下:
math.sqrt(-1) //1. 对负数的开方,无意义
math.log(-1) //2. 对负数求对数,无意义
0.0/0.0 //3. 0 / 0 其中一个为浮点数 (保证为浮点数除法)
0.0 * (1.0 / 0.0) //4. 实际是 0 * inf
(1.0 / 0.0) / (1.0 / 0.0) //5. 实际是 inf / inf (无论正负)
(1.0 / 0.0) - (1.0 / 0.0) //6. 实际是 inf - inf

// inf 产生的部分情况如下:
1.0 / 0.0 //1. 非零数字除以0 其中一个为浮点数(保证为浮点数除发) 得到 inf
-1.0 / 0.0 //2. 非零数字除以0 其中一个为浮点数(保证为浮点数除发) 得到 -inf
-100 + (1.0 / 0.0) //3. 实际是 -100 + inf,非nan数字加减inf
math.log(0) //4. log(0) 得到 -inf
1.0/0.0 - -1.0/0.0 //5, 实际是 inf - (-inf) 得到 inf
-1.0/0.0 - 1.0/0.0 //5, 实际是 (-inf) - inf 得到 -inf
提示

判断 inf 或者 nan 可以调用 math.isinf(float_number) math.isnan(float_number)


float常用的外部函数

下面列出float类型一些常用的外部函数以及用法。

1. float转成string

函数原型:
string float_instance.to_string()
使用方法:
float val = 3.14;
string str = val.to_string(); // str = "3.14"

2. string转成float

函数原型:
float float.parse(string str)
使用方法:
string str = "3.14";
float val = float.parse(str); // val = 3.14

3. 判断是否为float

函数原型:
bool is_float(mixed val)
使用方法:
float val = 3.14;
bool flag = is_float(val); // flag = true