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

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

(Last modified: )

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

浮動小数点数型は扱える数の範囲が異なる次の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);

select * from numtest;

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

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

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

insert into numtest values(3.55782, 3.55782);

select * from numtest;

桁数の合計と小数点以下の桁数(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);

select * from numtest;

ZEROFILL(2)

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

-- --

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

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。