新しいデータベース構造をチェックインすると、誰かがフィールドをfloatからdoubleに変更したことがわかりました。どうしてかと思って、mysqlのドキュメントをチェックしましたが、正直に違いが何であるか理解できませんでした。
誰かが説明できますか?
新しいデータベース構造をチェックインすると、誰かがフィールドをfloatからdoubleに変更したことがわかりました。どうしてかと思って、mysqlのドキュメントをチェックしましたが、正直に違いが何であるか理解できませんでした。
誰かが説明できますか?
回答:
どちらも浮動小数点数を表します。A FLOATは単精度用、a DOUBLEは倍精度数用です。
MySQLは、単精度値に4バイト、倍精度値に8バイトを使用します。
DECIMALデータ型で使用できる浮動小数点数や10進数(数値)とは大きな違いがあります。これは、浮動小数点数とは異なり、正確な数値データ値を格納するために使用されます。浮動小数点数では、正確な精度を維持することが重要です(たとえば、通貨データなど)。
おそらくこの例で説明できるでしょう。
CREATE TABLE `test`(`fla` FLOAT,`flb` FLOAT,`dba` DOUBLE(10,2),`dbb` DOUBLE(10,2));
次のようなテーブルがあります。
+-------+-------------+
| Field | Type |
+-------+-------------+
| fla | float |
| flb | float |
| dba | double(10,2)|
| dbb | double(10,2)|
+-------+-------------+
最初の違いとして、各フィールドに「1.2」のレコードを挿入しようとします。
INSERT INTO `test` values (1.2,1.2,1.2,1.2);
次のような表が表示されます。
SELECT * FROM `test`;
+------+------+------+------+
| fla | flb | dba | dbb |
+------+------+------+------+
| 1.2 | 1.2 | 1.20 | 1.20 |
+------+------+------+------+
違いを見ます?
次の例を試してみます:
SELECT fla+flb, dba+dbb FROM `test`;
ほら!このような違いを見つけることができます:
+--------------------+---------+
| fla+flb | dba+dbb |
+--------------------+---------+
| 2.4000000953674316 | 2.40 |
+--------------------+---------+
float(10, 2)
doubleは、floatと同じですが、2倍の大きさである点が異なります。これにより、精度が向上します。
別のを1.3追加または乗算するときに値を使用して違いを確認するのに役立つ独自の例を追加すると思いますがfloat、decimalなどをdouble。
1.3フロート1.3は、さまざまなタイプに追加されました:
|float | double | decimal |
+-------------------+------------+-----+
|2.5999999046325684 | 2.6 | 2.60000 |
1.31.3異なるタイプの浮動小数点数:
| float | double | decimal |
+--------------------+--------------------+--------------+
| 1.6899998760223411 | 1.6900000000000002 | 1.6900000000 |
これはMySQL 6.7を使用しています
クエリ:
SELECT
float_1 + float_2 as 'float add',
double_1 + double_2 as 'double add',
decimal_1 + decimal_2 as 'decimal add',
float_1 * float_2 as 'float multiply',
double_1 * double_2 as 'double multiply',
decimal_1 * decimal_2 as 'decimal multiply'
FROM numerics
テーブルを作成してデータを挿入:
CREATE TABLE `numerics` (
`float_1` float DEFAULT NULL,
`float_2` float DEFAULT NULL,
`double_1` double DEFAULT NULL,
`double_2` double DEFAULT NULL,
`decimal_1` decimal(10,5) DEFAULT NULL,
`decimal_2` decimal(10,5) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `_numerics`
(
`float_1`,
`float_2`,
`double_1`,
`double_2`,
`decimal_1`,
`decimal_2`
)
VALUES
(
1.3,
1.3,
1.3,
1.3,
1.30000,
1.30000
);
FLOATは最大8桁の精度で浮動小数点数を格納し、4バイトを持ちますが、DOUBLEは最大18桁の精度で浮動小数点数を格納し、8バイトを持ちます。