MySQL 8.4 发行说明
本节讨论 ROUND()
函数和向具有精确值类型的列 (DECIMAL
和整数) 插入数据时的精度数学四舍五入。
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 节,“表达式处理”)。