Type | Size | Range (符号付き) | 範囲 (符号なし) | 目的 |
==float== | 4 バイト | (-3.402 823 466 E 38, -1.175 494 351 E-38), 0, (1.175 494 351 E-38, 3.402 823 466 351 E 38) | 0, (1.175 494 351 E-38、3.402 823 466 E 38) | 単精度浮動小数点値 |
==double== | 8 バイト | (-1.797 693 134 862 315 7 E 308, -2.225073858507 2014E-308), 0, (2.225 073 858 507 201 4 E-308, 1.797 693 134 862 315 7 E 308) | 0 , (2.225 073 858 507 201 4 E-308, 1.797 693 134 862 315 7 E 308) | 倍精度浮動小数点値 |
10 進数 | 10進数(M,D)の場合、M>Dの場合はM 2、それ以外の場合はDです。 2 | MとD | の値に依存します。 M と D の値 | 10 進数値 |
MySQL のこれら 3 つの型はすべて浮動小数点型ですが、それらの違いは何でしょうか? ?
- float 浮動小数点型は == 単精度浮動小数点 == 数値を表すために使用され、
- double 浮動小数点型は == 倍精度浮動小数点を表すために使用されますpoint == Value
<strong>ここで「単精度とは何ですか、倍精度とは何ですか?」と尋ねたい友人もいるはずです。簡単に見てみましょう!</strong>
バイト (バイト) は 8 ビットを占めることがわかりますね!
float 単精度記憶浮動小数点型の場合==4x8=32 ビット長== であるため、float 単精度浮動小数点数はメモリ内で 4 バイトを占有し、32 ビット バイナリで記述されます。
次に、倍精度浮動小数点数は、小数点記憶型は == 8x8 =64 ビット長 == であるため、倍精度浮動小数点数はメモリ内で 8 バイトを占有し、64 ビット バイナリで記述されます。計算を通じて、64 ビットはより多くの仮数を取得できます!
仮数部 : == は小数点以下の桁数です==
したがって、ここでの精度は主に == 仮数部の桁数に依存します==部分、したがって、IEEE 2 進浮動小数点数算術標準に従って、 が計算と結論に使用されます:
float の単精度小数部分は、次の 6 までの精度しかありません。桁に加えて小数点の前に 1 桁を加えます。つまり、有効桁は 7 桁です。
倍精度小数部分は、小数点以下 15 桁と小数点の前に有効な 1 桁を加えた精度になります。 、これは 16 桁です。
最後に、小数点以下の桁の長さを区別します。長いほど正確になります!
double と float の違い:
- メモリ占有バイト数が異なります。単精度メモリは4バイト、倍精度メモリは8バイトを占有します。
- 有効桁数が異なります(仮数部) 単精度小数点以下 7 桁、倍精度小数点以下有効数字 16 桁が有効です
- 値の範囲が異なり、IEEE 標準に従って計算されます!
- プログラムの処理速度が異なります一般に、CPU による単精度浮動小数点数の処理は、倍精度浮動小数点数の処理よりも高速です。
double と float の相互の長所と短所:
float 単精度
利点: float 単精度は、一部のプロセッサでは倍精度よりも高速で、必要なスペースは double 倍精度の半分のみです
欠点: ただし、値が非常に大きいか小さい場合、不正確になります。
double double precision
利点: double と float と比較して、double はより高い精度が必要であり、仮数部は 16 桁まで可能ですが、float は 7 桁しか持ちません。仮数精度
欠点: Double double 精度はメモリを消費し、float 単精度の 2 倍高速です! double の演算速度は float よりもはるかに遅くなります。double は float よりも仮数の数が多いため、計算にオーバーヘッドが発生する必要があります。 !
double と float の使用シナリオを選択する方法!
まず第一に: メモリと速度を節約するために、単精度が使用できる場合は倍精度を使用しないでください。 up 演算!
float: もちろん、小数部分が必要で、精度要件がそれほど高くない場合は、float 単精度浮動小数点型を選択することをお勧めします!
double: なぜなら小数点以下の精度が高いため、倍精度が使用されます。高速な数学計算、科学計算、衛星測位計算などでは、実際にはプロセッサ上の倍精度型の方が単精度型よりも高速です。複数回の反復で計算の精度を維持する必要がある場合、または大きな値の数値を操作する場合、このような場合には倍精度が最適な選択です。
これだけのことを言うのは、実際には小数点以下の桁数が問題です!
==double と float の概要:==
float は少ないことを表します。小数点以下の桁数: Double を使用すると、より多くの小数点以下の桁数を表現でき、より正確になります。非常に簡単です。状況に応じて自分で選択するだけです!
double と float の後ろの長さ m と d は何を表しますか?
double(m,d ) と float( m,d) ここでの m,d は何を表しますか?多くの友人もよくわかりません! 説明を続けましょう
実際、前の整数 int(n) と同様に、これらの型にも追加のパラメータがあります: 表示幅 m と d の数を持つ小数点
例: float(7,3) ステートメントは、表示される値が 7 桁を超えないことを規定しています。同様に、小数点以下 3 桁と double
MySQL の定義時にも当てはまります。テーブル フィールドの unsigned 修飾子と zerofill 修飾子は、float、double、および 10 進数のデータ型でも使用でき、その効果は int データ型と同じです。上記と同じなので、ここでは詳しく説明しません。
== 概要:==
MySQL ステートメントで実際にテーブル フィールドを定義するとき、
float(M,D) unsigned の M はフィールドの数を表します。使用できる桁数。D は小数点を表します。後の小数点以下の桁数。符号なしは、負の数値が許可されないことを意味します。
double(M,D) 符号なしの M は、小数点以下の桁数を表します。 D は小数点以下の桁数を表します
==Note:== M>=D!
小数タイプ
==1.同じストレージに 10 進数==
を導入する 範囲値は通常、10 進数よりも使用するスペースが少なくなります。Float はストレージに 4 バイトを使用し、double は 8 バイトを使用します。
そして、10 進数は M と D の値に依存するため、10 進数の方が使用するスペースが少なくなります。
実際のエンタープライズレベルの開発では、金額 (3888.00 元) を格納する必要があるフィールドがよくありますが、このとき、データ型は 10 進数を使用する必要があります。
MySQL データベースでは、10 進数を使用するための構文は次のとおりです。 10 進数(M,D)、ここで、
M の範囲は 165 です。
D の範囲は 030 です。
また、D は M より大きくすることはできません。
==2. 最大値==
データ型が 10 進数のフィールドに格納できる最大値/範囲は何ですか?
例: 10 進数(5,2)、このフィールドには -999.99 ~ 999.99 を格納でき、最大値は 999.99 です。
つまり、Dは小数部の長さを表し、(M-D)は整数部の長さを表します。
==3.ストレージ== [理解]
10 進数型のデータ格納形式は、9 桁の 10 進数を 4 バイトとして格納します
(公式説明: DECIMAL 列の値は、10 進数 9 桁を 4 バイトに詰め込むバイナリ形式を使用して格納されます) )。
設定された桁数が 9 の倍数ではない可能性があります。公式は、比較のために次の表も提供しました:
残りの桁 |
バイト数 |
##0 | 0 |
1–2 | 1 |
3–4 | 2 |
5–6 | 3 |
7–9 | 4 |
==テーブルは何を意味しますか? 例: == 1. フィールド 10 進数 (18,9)、18-9=9 なので、整数部と小数部は両方とも 9 で、両辺はそれぞれ 4 バイトを占めます。
2. フィールド 10 進数 (20,6)、20-6=14、小数部は 6、上の表の 3 バイトに対応、整数部は 14、14-9=5、つまり 4 バイトテーブル内の 3 バイトに加えてしたがって、通常、小数を設定するときは、常に 10 進数タイプを使用します!!
Small case 1mysql> drop table temp2;
Query OK, 0 rows affected (0.15 sec)
mysql> create table temp2(id float(10,2),id2 double(10,2),id3 decimal(10,2));
Query OK, 0 rows affected (0.18 sec)
mysql> insert into temp2 values(1234567.21, 1234567.21,1234567.21),(9876543.21,
-> 9876543.12, 9876543.12);
Query OK, 2 rows affected (0.06 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from temp2;
+------------+------------+------------+
| id | id2 | id3 |
+------------+------------+------------+
| 1234567.25 | 1234567.21 | 1234567.21 |
| 9876543.00 | 9876543.12 | 9876543.12 |
+------------+------------+------------+
2 rows in set (0.01 sec)
mysql> desc temp2;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| id | float(10,2) | YES | | NULL | |
| id2 | double(10,2) | YES | | NULL | |
| id3 | decimal(10,2) | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
3 rows in set (0.01 sec)复制代码
small case 2 mysql> drop table temp2;
Query OK, 0 rows affected (0.16 sec)
mysql> create table temp2(id double,id2 double);
Query OK, 0 rows affected (0.09 sec)
mysql> insert into temp2 values(1.235,1,235);
ERROR 1136 (21S01): Column count doesn't match value count at row 1
mysql> insert into temp2 values(1.235,1.235);
Query OK, 1 row affected (0.03 sec)
mysql>
mysql> select * from temp2;
+-------+-------+
| id | id2 |
+-------+-------+
| 1.235 | 1.235 |
+-------+-------+
1 row in set (0.00 sec)
mysql> insert into temp2 values(3.3,4.4);
Query OK, 1 row affected (0.09 sec)
mysql> select * from temp2;
+-------+-------+
| id | id2 |
+-------+-------+
| 1.235 | 1.235 |
| 3.3 | 4.4 |
+-------+-------+
2 rows in set (0.00 sec)
mysql> select id-id2 from temp2;
+---------------------+
| id-id2 |
+---------------------+
| 0 |
| -1.1000000000000005 |
+---------------------+
2 rows in set (0.00 sec)
mysql> alter table temp2 modify id decimal(10,5);
Query OK, 2 rows affected (0.28 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> alter table temp2 modify id2 decimal(10,5);
Query OK, 2 rows affected (0.15 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from temp2;
+---------+---------+
| id | id2 |
+---------+---------+
| 1.23500 | 1.23500 |
| 3.30000 | 4.40000 |
+---------+---------+
2 rows in set (0.00 sec)
mysql> select id-id2 from temp2;
+----------+
| id-id2 |
+----------+
| 0.00000 |
| -1.10000 |
+----------+
2 rows in set (0.00 sec)复制代码
関連する無料学習の推奨事項: mysql ビデオ チュートリアル##
以上がMySQL の float、double、および 10 進浮動小数点型の違いを要約するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。