【検証】FLOAT / DOUBLE / DECIMALの違いとは?SQLで精度の差を比較してみた
Contents
はじめに
SQLで数値を扱うとき、「FLOAT」「DOUBLE」「DECIMAL」のどれを使うべきか迷ったことはありませんか?
とくに金額や精密な計算が関わるシステムでは、ちょっとした誤差が大きな問題になることもあります。
この記事では、実際にデータを使ってそれぞれのデータ型を検証しながら、どんな違いがあるのかを初心者の方でも理解できるようにやさしく解説していきます。
各データ型の特徴をざっくり整理
型名 | 特徴 | 精度(おおよそ) | よく使われる場面 |
---|---|---|---|
FLOAT | 軽くて速いが、精度はあまり高くない | 約7桁 | センサーデータ、統計処理など |
DOUBLE | FLOATより精度が高くて使いやすい | 約15桁 | 科学計算、グラフ描画など |
DECIMAL | 精度が非常に高い | 指定どおり | 金額、税率、金融計算 |
実験①:数値をそのまま挿入してみる(シンプルな検証)
📌 実験内容
-- テーブル作成
CREATE TABLE tmp_decimal (
num_float FLOAT,
num_double DOUBLE,
num_decimal DECIMAL(20,10)
);
-- データ挿入
INSERT INTO tmp_decimal VALUES(
1111111111.1111111111,
1111111111.1111111111,
1111111111.1111111111
);
-- データ取得
SELECT * FROM tmp_decimal;
結果(例)
num_float | num_double | num_decimal |
---|---|---|
1111110000 | 1111111111.1111112 | 1111111111.1111111111 |
解説
- FLOAT: 精度が足りないため、小数点以下が切り捨てられたり、整数部分にも誤差が出る可能性あり。
- DOUBLE: 小数点以下まである程度保持されるが、後半が丸められる。
- DECIMAL: 指定された精度どおりに完全に格納される。
このように、同じ数値を3種類の型で入れても結果がバラバラになるのがポイントです。
実験②:小数点以下15桁の数を保存してみる
CREATE TABLE tmp_precision (
num_float FLOAT,
num_double DOUBLE,
num_decimal DECIMAL(30,20)
);
INSERT INTO tmp_precision VALUES (
0.123456789012345,
0.123456789012345,
0.123456789012345
);
SELECT * FROM tmp_precision;
実行結果(例):
num_float | num_double | num_decimal |
---|---|---|
0.123457 | 0.123456789012345 | 0.12345678901234500000 |
実験③:非常に大きな数+小数を保存してみる
CREATE TABLE tmp_big_number (
num_float FLOAT,
num_double DOUBLE,
num_decimal DECIMAL(38,18)
);
INSERT INTO tmp_big_number VALUES (
999999999999999.123456789012345678,
999999999999999.123456789012345678,
999999999999999.123456789012345678
);
SELECT * FROM tmp_big_number;
実行結果(例):
num_float | num_double | num_decimal |
---|---|---|
1e15 | 999999999999999.1 | 999999999999999.123456789012345678 |
それぞれの型の使い分けポイント
FLOAT / DOUBLE を使うとよいケース
- 大量データや高速処理が必要な場合
- 少しの誤差が許される場合(ゲームやグラフ描画、IoTのセンサーデータなど)
DECIMAL を使うべきケース
- 金額や税率など、誤差が許されない数値
- 会計・金融・請求書など、精度が命の処理
まとめ
FLOAT
やDOUBLE
は高速ですが、精度に制限ありDECIMAL
は正確ですが、やや重い- 判断の基準は「誤差を許せるか?」
金額などの正確さが求められる場面では、迷わず DECIMAL
を使いましょう。
おまけ:覚えておくと便利なポイント
よくある用途 | 適した型 |
---|---|
センサーの値 | FLOAT |
天気予報の温度 | DOUBLE |
銀行口座の残高 | DECIMAL |
商品の税込価格 | DECIMAL |
位置情報の座標 | DOUBLE |
コメントを送信