文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  四舍五入行为

14.24.4 四舍五入行为

本节讨论 ROUND() 函数和向具有精确值类型的列 (DECIMAL 和整数) 插入数据时的精度数学四舍五入。

ROUND() 函数的四舍五入方式取决于其参数是精确值还是近似值。

  • 对于精确值数字,ROUND() 使用 四舍五入 规则:分数部分大于或等于 0.5 的值,如果为正则向上舍入到下一个整数,如果为负则向下舍入到下一个整数。(换句话说,它是四舍五入到远离零的方向。)分数部分小于 0.5 的值,如果为正则向下舍入到下一个整数,如果为负则向上舍入到下一个整数。(换句话说,它是四舍五入到接近零的方向。)

  • 对于近似值数字,结果取决于 C 库。在许多系统上,这意味着 ROUND() 使用 四舍六入五成双 规则:分数部分恰好位于两个整数中间的值,四舍五入到最近的偶数整数。

以下示例显示了精确值和近似值四舍五入的不同之处。

mysql> SELECT ROUND(2.5), ROUND(25E-1);
+------------+--------------+
| ROUND(2.5) | ROUND(25E-1) |
+------------+--------------+
| 3          |            2 |
+------------+--------------+

对于插入到 DECIMAL 或整数列中的数据,目标是精确数据类型,因此无论要插入的值是精确值还是近似值,四舍五入都使用 四舍五入到远离零的方向

mysql> CREATE TABLE t (d DECIMAL(10,0));
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO t VALUES(2.5),(2.5E0);
Query OK, 2 rows affected, 2 warnings (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 2

mysql> SHOW WARNINGS;
+-------+------+----------------------------------------+
| Level | Code | Message                                |
+-------+------+----------------------------------------+
| Note  | 1265 | Data truncated for column 'd' at row 1 |
| Note  | 1265 | Data truncated for column 'd' at row 2 |
+-------+------+----------------------------------------+
2 rows in set (0.00 sec)

mysql> SELECT d FROM t;
+------+
| d    |
+------+
|    3 |
|    3 |
+------+
2 rows in set (0.00 sec)

SHOW WARNINGS 语句显示由于四舍五入小数部分导致截断而产生的提示。即使在严格 SQL 模式下,这种截断也不是错误(请参见 第 14.24.3 节,“表达式处理”)。