このセクションでは、ROUND()
関数、そして正確値タイプ(DECIMAL
と整数)を利用したのカラムへの挿入の為の正確計算の丸めについて説明します。
ROUND()
関数は、引数が正確なものであるか、近似値であるかによって異なった丸めを実行します。
正確な値の数に対して、ROUND()
は 「round half up」
規則を使用します:.5以上の端数を持つ値は、次の整数がポジテブである場合、それに対して切り上げ、ネガティブである場合、それに対して切り下げます。(言い換えると、それはゼロから切り捨てられるという事です。).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 | +------+