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