# P28 28. 基础-函数-数值函数

> 本页是学习笔记，不等同于视频逐字稿。原声字幕未取得（匿名接口字幕轨为空且需登录，未使用任何账号），也没有逐句讲解记录；讲义只按节与页码对应，切点未逐句确证。

> 以同版讲义的公开镜像核对章节与页码（镜像非官方出品）；非逐字稿，示例为原创补充。

## P28 28. 基础-函数-数值函数

- 原视频：https://www.bilibili.com/video/BV1Kr4y1i7ru/?p=28（p=28），时长 9:16
- 讲义：3.2 数值函数 p56–57（公开镜像；按主题对应，切点 notexact）

- 本集练习数据：practice/p28.sql（先执行，再对照小例）

### 一句话理解

数值函数对数字做取整、取余、四舍五入这类加工，常用来把计算结果修成想要的精度。

### 步骤

1. 向上 / 向下取整：CEIL(1.2)=2，FLOOR(1.9)=1；注意负数时方向是“往大 / 往小”。
2. 取余：MOD(7,3)=1，等价于 7 % 3。
3. 四舍五入到指定位数：ROUND(值, 小数位数)，省略位数就取整。
4. 随机数：RAND() 返回 0 到 1 之间的小数。讲义 p57 的六位验证码就是三步组合：RAND 取随机 → 乘 1000000 再 ROUND 取整 → LPAD 补到 6 位。

### SQL 示例

```
SELECT CEIL(1.2) AS 上取整,
       FLOOR(1.9) AS 下取整,
       MOD(7, 3) AS 余数,
       ROUND(3.14159, 2) AS 两位小数,
       ROUND(2.5) AS 取整;
```

说明：【原创演示】全部是对常量的计算，不依赖任何表。结果一行：2、1、1、3.14、3。ROUND(2.5) 得 3，说明它按“远离 0”的方向处理 .5，而不是银行家舍入。

### 易错点

- 以为负数取整方向不变：CEIL(-1.2) 得 -1、FLOOR(-1.2) 得 -2，方向是“往大 / 往小”，不是“去掉小数”。
- 拿 ROUND 处理金额：浮点数只是近似值，ROUND(2.675,2) 可能得到 2.67；金额用 DECIMAL 存、按分计算。
- 在 WHERE 里对列套 ROUND 再比较：条件变成逐行现算，和直接比较原值不等价，边界行容易漏。

### 30 秒速记

CEIL 向上、FLOOR 向下、MOD 取余、ROUND 定位数（.5 远离 0）、RAND 随机；金额别靠浮点 ROUND。

### 自测

1. ROUND(2.5) 为什么是 3 而不是 2？
   - 答：MySQL 对 .5 采用远离 0 的方向取整，2.5 进到 3；负数的 -2.5 会得到 -3。
2. 为什么金额不建议用 ROUND 直接处理浮点列？
   - 答：浮点列存的是近似值，参与运算后可能与看上去的值略有偏差，四舍五入结果会出乎意料；用 DECIMAL 精确存再算才可控。

### 材料与来源

- [平台视频页] P28 原视频页（BV1Kr4y1i7ru） https://www.bilibili.com/video/BV1Kr4y1i7ru/?p=28
- [官方文档] MySQL 8.0 Reference：数值函数 https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html

证据说明：P28 标题为“数值函数”。采样帧多为代码区，未取得函数清单页；函数名与示例来自 P31 小结页（CEIL、FLOOR、MOD、RAND、ROUND）与 MySQL 8.0 数值函数文档对照，正文示例为原创，讲师演示与结果未核实；无字幕。
