- Home ›
- MySQLの使い方 ›
- MySQLのデータ型
浮動小数点数型(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);
FLOAT 型と DOUBLE 型、それぞれ格納可能な値の範囲が決まっています。範囲内の値であれば正常に格納することができます。
insert into numtest values(14.215, 71.5243);
範囲を超える値を格納しようとするとエラーとなります。例えば FLOAT 型のカラムに 4E+40 のような範囲外の値を格納しようとすると Out of range value for column 'カラム名' というエラーになります。
insert into numtest values(4E+40, 4E+40);
桁数の合計と小数点以下の桁数
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));
DOUBLE(6,4) のカラムは小数点以下の桁数が 4 で全体の桁数が 6 です。 DOUBLE(4,2) のカラムは小数点以下の桁数が 2 で全体の桁数が 4 です。
次のようなデータを追加した後でテーブルのデータを取得してみます。
insert into numtest values(25.3, 25.3);
select * from numtest;
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;
今回格納した値はどちらも小数点以下が 5 桁です。 DOUBLE(6,4) は小数点以下の桁数が 4 なので、小数点以下4桁の位置で四捨五入されて 3.5578 と表示されます。また DOUBLE(4,2) は小数点以下の桁数が 2 なので、小数点以下2桁の位置で四捨五入されて 3.56 と表示されます。
今度は次のようなデータを追加してみます。
insert into numtest values(128.5, 128.5);
どちらのカラムも整数部分の桁数は 2 です。整数部分の桁数を超える値を格納しようとすると Out of range value for column 'カラム名' というエラーになります。
符号なし(UNSIGNED)
FLOAT 型および DOUBLE 型は正の数と負の数を扱うことができますが、データ型の後に UNSIGNED を付けると 0 と正の数しか格納できなくなります。(なお整数型と異なり UNSIGNED を付けても正の数の範囲は変わりません)。例えば DOUBLE 型を符号なしにするには次のように記述します。
DOUBLE UNSIGNED
例として DOUBLE UNSIGNED 型のカラムを持つテーブルを作成してみます。
create table numtest(num1 double unsigned);
0 または 正の値の格納できる範囲は変わっていませんが、負の値は格納することができません。よって -10.125 のような負の値は格納しようとすると Out of range value for column 'カラム名' というエラーとなります。
insert into numtest values(-10.125);
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);
データを追加した後でテーブルのデータを取得してみます。
insert into numtest values(16.725, 16.725);
select * from numtest;
桁数分だけ 0 で埋められて表示されます。
-- --
MySQL で利用可能なデータ型の中で浮動小数点数型の使い方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。