MySQL 9.0 版本資訊
本節討論 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.25.3 節「運算式處理」)。