文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
手冊頁 (TGZ) - 258.2Kb
手冊頁 (Zip) - 365.3Kb
資訊 (Gzip) - 4.0Mb
資訊 (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  四捨五入行為

14.25.4 四捨五入行為

本節討論 ROUND() 函數和插入到具有精確值類型 (DECIMAL 和整數) 的資料行時的精確數學四捨五入。

ROUND() 函數的四捨五入方式會因其引數是精確值或近似值而異。

  • 對於精確值數字,ROUND() 使用四捨五入到一半規則:如果正數的小數部分為 .5 或更大,則會四捨五入到下一個整數,如果負數的小數部分為 .5 或更大,則會四捨五入到下一個整數。(換句話說,會向遠離零的方向四捨五入。)如果正數的小數部分小於 .5,則會四捨五入到下一個整數,如果負數的小數部分小於 .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.25.3 節「運算式處理」)。