浮動小数点数型(FLOAT, DOUBLE)

広告
eyecatch

MySQL で利用可能なデータ型の中で浮動小数点数型(FLOAT, DOUBLE)の使い方について解説します。

浮動小数点数型のデータ型一覧

浮動小数点数型は扱える数の範囲が異なる次の2つの種類が用意されています。

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

許可される値は
-3.402823466E+38 から -1.175494351E-38
0
1.175494351E-38 から 3.402823466E+38
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

許可される値は
-1.7976931348623157E+308 から -2.2250738585072014E-308
0
2.2250738585072014E-308 から 1.7976931348623157E+308
別名:DOUBLE PRECISION 、 REAL

FLOAT 型は単精度浮動小数点数でおおよそ小数第 7 位まで正確です。また DOUBLE 型は倍精度小数点数でおおよそ小数第 15 位まで正確です。

例えば FLOAT 型のカラムと DOUBLE 型のカラムを持つテーブルを作成してみます。

create table numtest(num1 float, num2 double);

浮動小数点数型のデータ型一覧(1)

FLOAT 型と DOUBLE 型、それぞれ格納可能な値の範囲が決まっています。範囲内の値であれば正常に格納することができます。

insert into numtest values(14.215, 71.5243);

浮動小数点数型のデータ型一覧(2)

範囲を超える値を格納しようとするとエラーとなります。例えば FLOAT 型のカラムに 4E+40 のような範囲外の値を格納しようとすると Out of range value for column 'カラム名' というエラーになります。

insert into numtest values(4E+40, 4E+40);

浮動小数点数型のデータ型一覧(3)

桁数の合計と小数点以下の桁数

FLOAT 型と DOUBLE 型は桁数の合計と小数点以下の桁数を指定することができます。書式は次の通りです。

FLOAT(桁数の合計, 小数点以下の桁数)
DOUBLE(桁数の合計, 小数点以下の桁数)

桁数は全体の桁数で、小数点以下の桁数は桁数の中で小数点以下の桁数です。例えば全体が 5 桁で小数点以下の桁数が 3 桁のものは double(5, 3) と記述し、 34.567 のように表示されます。

例として DOUBLE(6,4) 型のカラムと DOUBLE(4,2) 型のカラムを持つテーブルを作成してみます。

create table numtest(num1 double(6,4), num2 double(4,2));

桁数の合計と小数点以下の桁数(1)

DOUBLE(6,4) のカラムは小数点以下の桁数が 4 で全体の桁数が 6 です。 DOUBLE(4,2) のカラムは小数点以下の桁数が 2 で全体の桁数が 4 です。

次のようなデータを追加した後でテーブルのデータを取得してみます。

insert into numtest values(25.3, 25.3);

桁数の合計と小数点以下の桁数(3)

DOUBLE(6,4) は小数点以下の桁数が 4 で全体の桁数が 6 ですので 25.3000 と表示されます。また DOUBLE(4,2) は小数点以下の桁数が 2 で全体の桁数が 4 ですので 25.30 と表示されます。

今後は次のようなデータを追加した後でテーブルのデータを取得してみます。

insert into numtest values(3.55782, 3.55782);

桁数の合計と小数点以下の桁数(2)

今回格納した値はどちらも小数点以下が 5 桁です。 DOUBLE(6,4) は小数点以下の桁数が 4 なので、小数点以下4桁の位置で四捨五入されて 3.5578 と表示されます。また DOUBLE(4,2) は小数点以下の桁数が 2 なので、小数点以下2桁の位置で四捨五入されて 3.56 と表示されます。

今後は次のようなデータを追加してみます。

insert into numtest values(128.5, 128.5);

桁数の合計と小数点以下の桁数(3)

どちらのカラムも整数部分の桁数は 2 です。整数部分の桁数を超える値を格納しようとすると Out of range value for column 'カラム名' というエラーになります。

符号なし(UNSIGNED)

FLOAT 型および DOUBLE 型は正の数と負の数を扱うことができますが、データ型の後に UNSIGNED を付けると 0 と正の数しか格納できなくなります。(なお整数型と異なり UNSIGNED を付けても正の数の範囲は変わりません)。例えば DOUBLE 型を符号なしにするには次のように記述します。

DOUBLE UNSIGNED

例として DOUBLE UNSIGNED 型のカラムを持つテーブルを作成してみます。

create table numtest(num1 double unsigned);

符号なし(UNSIGNED)(1)

0 または 正の値の格納できる範囲は変わっていませんが、負の値は格納することができません。よって -10.125 のような負の値は格納しようとすると Out of range value for column 'カラム名' というエラーとなります。

insert into numtest values(-10.125);

符号なし(UNSIGNED)(2)

ZEROFILL

データ型に ZEROFILL をつけるとデータ型の桁数分 0 で埋められます。例えば DOUBLE 型に ZEROFILL を付ける場合は次のように記述します。

DOUBLE ZEROFILL

※ ZEROFILL を付けると自動的に UNSIGNED が付きます

例として DOUBLE ZEROFILL 型のカラムと DOUBLE(10, 5) ZEROFILL 型のカラムを持つテーブルを作成してみます。

create table numtest(num1 double zerofill, num2 double(10, 5) zerofill);

ZEROFILL(1)

データを追加した後でテーブルのデータを取得してみます。

insert into numtest values(16.725, 16.725);

ZEROFILL(2)

桁数分だけ0で埋められて表示されます。

-- --

MySQL で利用可能なデータ型の中で浮動小数点数型の使い方について解説しました。

MySQLの使い方の他の記事を見てみる

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。