MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLに小数を格納する方法は?DECIMAL型の使い方を徹底解説

MySQLで小数(少数点以下の値を持つ数値)を正確に格納したい場合は、DECIMAL型を使用します。金額などの誤差が許されないデータを扱う際には、FLOAT型やDOUBLE型ではなく、DECIMAL型を選ぶのが基本です。

DECIMAL型の基本的な書式

DECIMAL型を定義する際には、次の2つのパラメータを指定します。

DECIMAL(全体の桁数, 小数点以下の桁数);

具体例:

DECIMAL(4,2) の場合、「全体で4桁、そのうち小数点以下が2桁」という意味になります。つまり、整数部分は最大2桁、小数部分は最大2桁まで格納できます。

  • ケース1: 12.34 → 有効(そのまま格納される)
  • ケース2: 123.4 → 無効(整数部分が3桁になり範囲外のためエラー)
  • ケース3: 1.234 → 有効(小数第3位の「4」は丸められ、1.23として格納される)

実際にテーブルを作成して確認してみよう

それでは、実際にテーブルを作成して動作を確認してみましょう。まずは DECIMAL(4,2) 型のカラムを持つテーブルを作成します。

mysql> create table DecimalDemo
    -> (
    -> Amount DECIMAL(4,2)
    -> );
Query OK, 0 rows affected (0.47 sec)

無効な値を挿入した場合

定義した範囲を超える値を挿入しようとすると、エラーが発生します。DECIMAL(4,2) に対する無効な値の例は以下の通りです。

mysql> insert into DecimalDemo values(123.4);
ERROR 1264 (22003): Out of range value for column 'Amount' at row 1

mysql> insert into DecimalDemo values(1234);
ERROR 1264 (22003): Out of range value for column 'Amount' at row 1

mysql> insert into DecimalDemo values(1234.56);
ERROR 1264 (22003): Out of range value for column 'Amount' at row 1

いずれも整数部分が2桁を超えているため、「範囲外の値」としてエラー ERROR 1264 が返されます。

有効な値を挿入した場合

一方、範囲内の値であれば問題なく挿入できます。小数点以下が指定桁数を超える場合は、自動的に丸められて格納されます(警告は表示されますが、INSERT自体は成功します)。

mysql> insert into DecimalDemo values(12.34);
Query OK, 1 row affected (0.13 sec)

mysql> insert into DecimalDemo values(12.4);
Query OK, 1 row affected (0.18 sec)

mysql> insert into DecimalDemo values(.2345);
Query OK, 1 row affected, 1 warning (0.18 sec)

mysql> insert into DecimalDemo values(1.234);
Query OK, 1 row affected, 1 warning (0.16 sec)

SELECT文で格納された値を確認する

最後に、SELECT文を使ってテーブル内のすべての値を表示してみましょう。

mysql> select *from DecimalDemo;

出力結果

+--------+
| Amount |
+--------+
| 12.34  |
| 12.40  |
| 0.23   |
| 1.23   |
+--------+
4 rows in set (0.00 sec)

このように、小数点以下の桁数に合わせて値が整形されて格納されていることがわかります。12.412.40 として、また .23451.234 は小数第2位で丸められ、それぞれ 0.231.23 として保存されています。

まとめ

  • MySQLで小数を正確に格納するには DECIMAL型 を使う。
  • DECIMAL(M,D) の形式で、Mは全体の桁数、Dは小数点以下の桁数を表す。
  • 範囲外の値を挿入すると ERROR 1264 (Out of range value) が発生する。
  • 小数点以下が超過する場合は自動的に丸められて格納される。
  • 金額など精度が重要なデータには、必ずDECIMAL型を使用することをおすすめします。
  1. MySQLに数値をDECIMAL型(10進数)として保存・フォーマットする方法

    MySQLで数値を10進数として扱うには? MySQLでは、数値をわざわざ文字列としてフォーマットして保存する必要はありません。DECIMALデータ型を使えば、小数点以下の桁数を指定した正確な10進数としてそのまま格納できます。 例えば DECIMAL(10,2) と定義すると、整数部分が最大8桁、小数部分が2桁の数値を保存できます。小数第3位以下の値は自動的に丸められます。 1. テーブルを作成する まず、DECIMAL型のカラムを持つテーブルを作成しましょう。 mysql> create table DemoTable1330 -> ( -> Amount

  2. PayPalの小数点以下の金額をMySQLデータベースに保存する方法

    PayPalなどの決済システムで扱う小数点以下の金額をMySQLデータベースに保存する場合は、DECIMAL(10,2)型を使用するのが最適です。金銭に関するデータをFLOAT型やDOUBLE型で保存すると、浮動小数点演算の仕組み上、誤差が発生する可能性があります。そのため、正確な値を保持できるDECIMAL型を使うことが強く推奨されます。DECIMAL(10,2)とはDECIMAL(10,2)は、全体で最大10桁、うち小数点以下が2桁という指定です。つまり、-9,999,999,999.99〜9,999,999,999.99までの金額を丸め誤差なしで保存できます。テーブルの作成まず、DECI