MySQL 8.4 Release Notes
14.24.4 舍入行为
本节讨论了舍入数学舍入行为对于ROUND()
函数和将精确值类型列插入的舍入行为(DECIMAL
和整数)。
舍入函数ROUND()
根据其参数是否为精确或近似值而进行舍入:
以下示例展示了舍入精确和近似值的差异:
mysql> SELECT ROUND(2.5), ROUND(25E-1);
+------------+--------------+
| ROUND(2.5) | ROUND(25E-1) |
+------------+--------------+
| 3 | 2 |
+------------+--------------+
将精确值类型或整数列插入时,目标是一个精确数据类型,因此舍入使用“舍入远离零”,无论插入的值是否为精确或近似:
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模式下(见Section 14.24.3, “Expression Handling”)。