このセクションで、精密計算に於ける ROUND()機能並びに正確な値のタイプ(DECIMALと整数)のコラムへの挿入のための丸めについて論説します。
ROUND()機能は、引数が正確なものであるか、近似値であるかによって異なった丸めを実行します:
正確な値の数に対して、ROUND()は「round half up」規則を使用します:.5以上の端数を持つ値は、次の整数がポジテブである場合、それに対して切り上げ、ネガテブである場合、それに対して切り下げます。(換言すれば、それはゼロから切り捨て(round away)られます。).5以上の端数を持つ値は、次の整数がポジテブである場合、それに対して切り上げ、ネガテブである場合、それに対して切り下げます。
近似値の数に対する結果はC ライブラリーによって異なります。多くのシステム上では、これは、ROUND()は 「round to nearest even」 規則を使用することを意味します:端数部分を持つ値は最も近い偶整数に丸められます。
以下の例は、正確な値の丸めと近似値の丸めの違いを示しています。
mysql> SELECT ROUND(2.5), ROUND(25E-1);
+------------+--------------+
| ROUND(2.5) | ROUND(25E-1) |
+------------+--------------+
| 3 | 2 |
+------------+--------------+
DECIMALまたは整数コラムへの挿入の場合、目標は正確なデータタイプであから、挿入すべき値が正確か近似であるかを問わず、丸めには 「round half up,」が使われます。
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>SELECT d FROM t;+------+ | d | +------+ | 3 | | 3 | +------+
