
# 数值类型

以下表格列出了 MAXIR 支持的数值类型。

| 名称 | 存储大小 | 取值范围 | 描述 |
| :- | :- | :- | :- |
| `bigint` | 8 字节 | -9223372036854775808 到 9223372036854775807 | 大范围整数。 |
| `integer` | 4 字节 | -2147483648 到 +2147483647 | 整数。该类型是存储整数的常见选择，在范围、大小和性能之间提供了最好的平衡。 |
| `smallint` | 2 字节 | -32768 到 +32767 | 小范围整数。 |
| `double precision` | 8 字节 | 15 位小数精度 | 具有小数部分的数字。 |
| `real` | 4 字节 | 6 位小数精度 | 单精度浮点数。 |
| `decimal` | 可变 | 128 位有符号整数，精度可达 38 位 | 精确数字，精度由用户指定。 |

<br/>

---

## 整数类型

`smallint`、`integer` 和 `bigint` 类型存储不同范围的整数。使用三者中的任一存储不在其对应的范围内的整数都会导致报错。

---
## 浮点类型

`real` 和 `double precision` 类型是不精确的，可变精度数值类型。

`real` 和 `double precision` 是不精确的，所以在存储和检索对应值时可能会出现轻微的差异。需要精确的存储或计算时，不要使用这两个数据类型。


---
## 十进制类型

`decimal` 类型用于存储精度由用户定义的数字。

要定义一个 `decimal` 列，你需要指定 *`<precision>`* 和 *`<scale>`*：

```sql
decimal(<precision>, <scale>)
```

其中：

- *`<precision>`* 指定小数点两侧的数字位数，最大值为 38。如果未指定，默认使用精度 18。

- *`<scale>`* 指定小数点右侧的数字位数，最大值为 37。如果未指定，默认使用精度 0。

例如，数字 `3.1415926` 的精度为 8，小数位数为 7。

如果输入值的小数位数大于加载值的列的小数位数，该值将四舍五入到指定的小数位数。然而，从表中选取的值的显式转换的结果不会被四舍五入。

>说明:<br/>
>如前所述，`decimal` 列的 *`<precision>`* 是小数点左侧的数字位数和 *`<scale>`* 的总和，因此
>- 如果输入值的小数点左侧指定的数字位数大于列的精度减去小数位数（即 *`<precision>`* - *`<scale>`*），那么该值就不能复制到该列。
>- `decimal` 列指定的 *`<scale>`* 不能大于该列的 *`<precision>`*。
