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