Source: https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-types/numeric-type/ Documentation version: v5.3.2 # 数值 GQL 支持整数、浮点数和任意精度数。整数可以有符号或无符号,而浮点数和任意精度数都是有符号的。 有符号指可以为正数、负数或零(默认为正数);无符号指只能为非负数。 ## 有符号整数 有符号整数可以是非负数(正数或零)或负数。 下表列出了有符号整数的类型及其取值范围。 | 类型 | 声明关键字 | 取值范围 | INT64 | `INT`和`INT64` | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | INT32 | `INT32` | -2,147,483,648 ~ 2,147,483,647 | INT16 | `INT16` | -32,768 ~ 32,767 | INT8 | `INT8` | -128 ~ 127 ## 无符号整数 无符号整数总是非负数。 下表列出了无符号整数的类型及其取值范围。 | 类型 | 声明关键字 | 取值范围 | UINT64 | `UINT`和`UINT64` | 0 ~ 18,446,744,073,709,551,615 | UINT32 | `UINT32` | 0 ~ 4,294,967,295 | UINT16 | `UINT16` | 0 ~ 65,535 | UINT8 | `UINT8` | 0 ~ 255 ## 浮点数 GQL 支持单精度浮点数(FLOAT)和双精度浮点数(DOUBLE)。 | 类型 | 声明关键字 | 取值范围 | FLOAT32 | `FLOAT32`, `FLOAT` | 3.4E +/- 38 | FLOAT64 | `FLOAT64`, `DOUBLE` | 1.7E +/- 308 支持科学计数法,例如`1e2`、`1.1e2`、`.3e4`、`1.e4`和`-1234E-10`。 ## 特殊值 `FLOAT`(`FLOAT32`)和`DOUBLE`(`FLOAT64`)类型支持以下特殊值: | 表达式 | 描述 | 类型 | `1.0f/0.0`、`1.0d/0.0` | 正无穷 | `FLOAT` / `DOUBLE` | `-1.0f/0.0`、`-1.0d/0.0` | 负无穷 | `FLOAT` / `DOUBLE` | `0.0f/0.0`、`0.0d/0.0` | 非数值 | `FLOAT` / `DOUBLE` Note `f`和`d`分别表示`FLOAT`(`FLOAT32`)和`DOUBLE`(`FLOAT64`)类型。 这些特殊值也可以通过转换字符串来创建。更多信息,请参见[特殊值的转换](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/expressions/cast/#_9)。 ## 任意精度数 任意精度数用于存储对精确度要求较高且位数较多的数值。 ### 语法 语法图源码 arbitrary_precision_number ```` arbitrary_precision_number ::= ( 'DECIMAL' | 'DEC' ) (precision (',' scale)? )? ```` 精度(precision)是整数部分和小数部分的总位数,其取值范围为 1 到 256。 小数位数(scale)是小数点后的位数,其取值范围为 0 到 128。小数位数不能大于精度。 #### 默认值 如果精度和小数位数均未指定,则精度默认取值为 10,小数位数默认取值为 0。 如果只指定了精度,则小数位数默认取值为 0。 #### 规则 如果声明的精度和小数位数相同,则只能存储绝对值小于 1 的小数。例如,`DECIMAL(3, 3)`只能存储范围在 -0.999 到 0.999 之间的值。 如果小数点左侧的数字位数大于声明的精度和小数位数之间的差值,将返回错误。例如,如果声明的精度为 4,声明的小数位数为 2,则无法存储值 123.4。 如果小数点右侧的数字位数大于声明的小数位数,则将四舍五入到声明的小数位数。例如,如果声明的精度为 4,声明的小数位数为 2,则值 1.234 将存储为 1.23。 如果小数点右侧的数字位数小于声明的小数位数,则在值的右侧填充零,以匹配声明的小数位数。例如,如果声明的精度为 4,声明的小数位数为 2,则值 12.3 将显示为 12.30。 ## 声明示例 示例 1: ```` ''' CREATE GRAPH TYPE IF NOT EXISTS person AS { NODE Person ( { id INT64 PRIMARY KEY, salary DECIMAL(10, 4) DEFAULT 10000.00M, is_adult BOOL DEFAULT TRUE, name STRING DEFAULT 'John Doe', hobbies LIST DEFAULT ['reading', 'swimming'], birthday DATE DEFAULT DATE('1990-01-01') } ) } ''' ```` 在上述示例中,属性`id`的数据类型为整数(`INT64`),属性`salary`的数据类型为任意精度数(`DECIMAL(10, 4)`)。 示例 2: ```` ''' CREATE GRAPH TYPE IF NOT EXISTS person2 AS { NODE Person ( { id INT64 PRIMARY KEY, salary DECIMAL } ) } ''' ```` 在上述示例中,属性`salary`的数据类型为任意精度数(`DECIMAL`),默认精度为 10,默认小数位数为 0。 ## 更多信息 [数值字面量](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/literals/#_2)