MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む

このページは機械翻訳したものです。

12.25.4 丸め動作

このセクションでは、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 モードでもエラーになりません (セクション12.25.3「式の処理」 を参照)。