MySQL の 3 つの浮動小数点型 (float、double、decimal) の違いと概要について簡単に説明します。

MySQL の 3 つの浮動小数点型 (float、double、decimal) の違いと概要について簡単に説明します。

各浮動小数点型のストレージ サイズと範囲は、次の表に示されています。

タイプサイズ範囲(符号付き)範囲(符号なし)使用
==フロート== 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)単精度浮動小数点値
==ダブル== 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)倍精度浮動小数点値
小数点小数点(M,D)の場合、M>DであればM+2、そうでなければD+2となる。 MとDの値に依存するMとDの値に依存する小数値

これら 3 つは MySQL の浮動小数点型ですが、それらの違いは何でしょうか? ?

  • float 浮動小数点型は、単精度浮動小数点値を表すために使用されます。
  • double 浮動小数点型は、倍精度浮動小数点値を表すために使用されます。

ここで、単精度と倍精度とは何なのかと疑問に思う人もいるでしょう。 以下で簡単に見てみましょう!

1 バイトは 8 ビットを占めることはご存知ですよね?

float 単精度浮動小数点型の長さは 4x8=32 ビットなので、float 単精度浮動小数点数はメモリ内で 4 バイトを占め、32 ビットのバイナリで記述されます。

そして、double 倍精度浮動小数点型の長さは ==8x8=64 ビット== なので、double 倍精度浮動小数点数はメモリ内で 8 バイトを占め、64 ビットのバイナリを使用して記述されます。計算により、64 ビットではより多くの仮数を取得できます。

仮数: == は小数点以下の桁数です ==

したがって、ここでの精度は主に ==仮数== 部分の桁数に依存するため、IEEE 2 進浮動小数点演算標準に従って計算して次のように結論付けることができます。

  • 単精度浮動小数点数部分は、最後の6桁と小数点の前の1桁までしか正確ではありません。つまり、有効桁は7桁です。
  • 倍精度小数部は、小数点以下 15 桁と小数点の前の 1 桁の有効数字を加えた 16 桁の精度になります。
  • 最後に、小数点以下の数字の長さが区別され、長いほど正確になります。

double と float の違い:

  • メモリに占めるバイト数が異なります。単精度メモリは 4 バイト、倍精度メモリは 8 バイトを占めます。
  • 有効桁数が異なります(仮数部):単精度では小数点以下の有効桁数は7桁、倍精度では小数点以下の有効桁数は16桁です。
  • 数値範囲が異なります。IEEE規格に従って計算してください。
  • プログラムによって処理速度が異なります。一般的にCPUは単精度浮動小数点数の方が倍精度浮動小数点数より高速に処理します。

double と float の利点と欠点:

float 単精度の利点: float 単精度は、一部のプロセッサでは double 倍精度よりも高速で、double 倍精度の半分のスペースしか占有しません。欠点: ただし、値が非常に大きいか非常に小さい場合は、不正確になります。

倍精度の利点: 浮動小数点数と比較すると、倍精度は精度が高く、仮数は 16 ビットにすることができますが、浮動小数点数の仮数精度は 7 ビットしかありません。 欠点: 倍精度はメモリを消費し、浮動小数点数の単精度の 2 倍になります。倍精度の計算速度は浮動小数点数よりもはるかに遅くなります。これは、倍精度の仮数が浮動小数点数の仮数よりも大きいため、計算コストが高くなるためです。

doubleとfloatの使用シーンの選び方!

まず第一に、メモリを節約し計算を高速化するために単精度が利用できる場合は倍精度を使用しないでください。
float: もちろん、小数部分が必要で高精度を必要としない場合は、単精度浮動小数点型 float を選択することをお勧めします。
倍精度: 小数点以下の精度が高いため、倍精度は高速な数学計算、科学計算、衛星測位計算などに使用されます。プロセッサでは、倍精度の方が単精度よりも実際に高速です。そのため、複数の繰り返し計算の計算精度を維持する必要がある場合や、大きな数値を操作する場合は、倍精度が最適です。
これはすべて、実際には小数点以下の桁数を何桁にするかという問題です。

==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 は小数点以下の桁数を表します。unsigned は負の数が使用できないことを意味します。
double(M,D) unsigned M は使用できる桁数を表し、D は小数点以下の桁数を表します。
==注意:== M>=D!

小数点型

==1. 小数点入門==
同じ範囲の値を格納する場合、通常は 10 進数よりも少ないスペースを使用し、float は 4 バイトを使用して格納し、double は 8 バイトを使用して格納します。
小数はMとDの値に依存するため、小数はより少ないスペースを使用します。実際の企業レベルの開発では、金額(3888.00元)を格納する必要があるフィールドによく遭遇します。このとき、小数データ型を使用する必要があります。
MySQL データベースでは、10 進数の構文は、decimal(M,D) です。
Mの範囲は165です。
Dの範囲は030です。
また、D は M より大きくなることはできません。

==2. 最大値==
10 進データ型のフィールドに格納できる最大値/範囲は何ですか?
たとえば、decimal(5,2) の場合、フィールドには -999.99 ~ 999.99 を格納でき、最大値は 999.99 です。
つまり、D は小数部の長さを表し、(MD) は整数部の長さを表します。
==3. 保管== [理解する]
10 進型のデータ格納形式は、10 進数 9 桁をそれぞれ 4 バイトとして格納します (公式説明: DECIMAL 列の値は、10 進数 9 桁を 4 バイトにパックするバイナリ形式を使用して格納されます)。
設定された桁数が 9 の倍数ではない可能性があります。公式では比較のために次の表も提供しています。

残った数字バイト数
0 0
1–2 1
3~4 2
5~6歳3
7~9 4

==表は何を意味しますか? 例: ==
1. フィールドdecimal(18,9)、18-9=9なので、整数部分と小数部分は両方とも9であり、各辺は4バイトを占めます。
2. フィールドは、decimal(20,6)、20-6=14 です。ここで、小数部分は 6 で、これは上記の表の 3 バイトに相当します。整数部分は 14 で、14-9=5 で、これは表の 4 バイト + 3 バイトに相当します。したがって、通常、小数を設定する場合は、decimal 型を使用します。

小型ケース1

mysql> テーブル temp2 を削除します。
クエリは正常、影響を受けた行は 0 行 (0.15 秒)

mysql> テーブル temp2(id float(10,2),id2 double(10,2),id3 小数点以下(10,2)) を作成します。
クエリは正常、影響を受けた行は 0 行 (0.18 秒)

mysql> temp2 に値を挿入します(1234567.21, 1234567.21,1234567.21),(9876543.21, 
  -> 9876543.12、9876543.12);
クエリは正常、2 行が影響を受けました (0.06 秒)
記録: 2 重複: 0 警告: 0

mysql> temp2 から * を選択します。
+------------+------------+-------------+
| id | id2 | id3 |
+------------+------------+-------------+
| 1234567.25 | 1234567.21 | 1234567.21 |
| 9876543.00 | 9876543.12 | 9876543.12 |
+------------+------------+-------------+
セットに2行(0.01秒)

mysql> desc temp2;
+-------+---------------+------+-----+--------+-------+
| フィールド | タイプ | Null | キー | デフォルト | 追加 |
+-------+---------------+------+-----+--------+-------+
| id | float(10,2) | はい | | NULL | |
| id2 | double(10,2) | はい | | NULL | |
| id3 | 小数点(10,2) | はい | | NULL | |
+-------+---------------+------+-----+--------+-------+
セット内の 3 行 (0.01 秒)

小型ケース2

mysql> テーブル temp2 を削除します。
クエリは正常、影響を受けた行は 0 行 (0.16 秒)

mysql> テーブル temp2(id double、id2 double) を作成します。
クエリは正常、影響を受けた行は 0 行 (0.09 秒)

mysql> temp2 に値 (1.235,1,235) を挿入します。
エラー 1136 (21S01): 列数が行 1 の値数と一致しません
mysql> temp2 に値 (1.235,1.235) を挿入します。
クエリは正常、1 行が影響を受けました (0.03 秒)

マイSQL> 
mysql> temp2 から * を選択します。
+-------+-------+
| id | id2 |
+-------+-------+
| 1.235 | 1.235 |
+-------+-------+
セット内の 1 行 (0.00 秒)

mysql> temp2 に値 (3.3,4.4) を挿入します。
クエリは正常、1 行が影響を受けました (0.09 秒)

mysql> temp2 から * を選択します。
+-------+-------+
| id | id2 |
+-------+-------+
| 1.235 | 1.235 |
| 3.3 | 4.4 |
+-------+-------+
セット内の 2 行 (0.00 秒)

mysql> temp2 から id-id2 を選択します。
+---------------------+
|id-id2|
+---------------------+
| 0 |
|-1.10000000000000005 |
+---------------------+
セット内の 2 行 (0.00 秒)

mysql> テーブル temp2 を変更し、ID を 10 進数 (10,5) に変更します。
クエリは正常、2 行が影響を受けました (0.28 秒)
記録: 2 重複: 0 警告: 0

mysql> テーブル temp2 を変更し、 id2 を 10 進数 (10,5) に変更します。
クエリは正常、2 行が影響を受けました (0.15 秒)
記録: 2 重複: 0 警告: 0

mysql> temp2 から * を選択します。
+---------+---------+
| id | id2 |
+---------+---------+
| 1.23500 | 1.23500 |
| 3.30000 | 4.40000 |
+---------+---------+
セット内の 2 行 (0.00 秒)

mysql> temp2 から id-id2 を選択します。
+----------+
|id-id2|
+----------+
| 0.00000 |
|-1.10000 |
+----------+
セット内の 2 行 (0.00 秒)


これで、MySQL の float、double、decimal の 3 つの浮動小数点型の違いと概要についての記事は終了です。MySQL の float、double、decimal に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL の 10 進数データ型の小数点埋め込み問題の詳細な説明
  • MySQL 10進数符号なし更新負数を0に変換
  • MySQL データ型 DECIMAL の詳細な分析
  • MySQL における 10 進数型の使用法の簡単な紹介
  • MySQL データ型 DECIMAL(N,M) における N と M の意味の詳細な説明
  • MySQL データ型における DECIMAL の使用法の詳細な説明
  • MySQL における Decimal 型と Float Double 型の違い (詳細説明)
  • MySQL データ型 DECIMAL の使用方法の詳細な説明

<<:  配列をフラット化する 5 つの JavaScript の方法

>>:  Dockerコンテナに入る方法と出る方法

推薦する

MySQL 5.7.17 圧縮パッケージのインストールと設定方法のグラフィックチュートリアル

インターネット上にはMySQL 5.7.17のインストールチュートリアルがほとんどなく不十分なので、...

時系列転位修復ケースを実装するSQL

目次1. 要件の説明2. アイデアの概要1. 延長を要求する2. アイデアの概要3. SQLコード1...

mysql5.7.24 バージョンのインストール手順と解凍時に発生した問題の概要

1. ダウンロード参考: 2. D:\MySQL\mysql-5.7.24 などの固定の場所に解凍し...

8 JSのreduce使用例とreduce操作方法

reduceメソッドは配列の反復メソッドです。 mapやfilterとは異なり、 reduceメソッ...

jsプロジェクトでの双方向データバインディングの簡単な実装方法

目次序文パブリッシュ・サブスクライバ・パターン結果電話要約する序文双方向データ バインディングとは、...

mysql5.7のインストールとNavicateの長期無料利用の実施手順

(I) mysql5.7のインストール: ❀詳細:無料のグリーンバージョン5.7のインストール方法は...

HTML の値属性と名前属性の機能と使用法の紹介

1. ボタンで使用される値は、「OK」、「削除」など、ボタンに表示されるテキストを指します。 2. ...

WindowsシステムでPhPStudy MySQLの起動に失敗する問題を解決する

エラーを報告するApache\Nginx サービスは正常に起動しましたが、MySQL は起動に失敗し...

データベース復旧エラーの原因となる MySQL 文字セットの簡単な分析

MySQL の文字セットエンコーディングが正しくないデータをインポートすると、エラーが表示されます。...

RGBカラーテーブルコレクション

RGBカラーテーブル色英語名RGB 16色雪255 250 250 #FFFAFAゴーストホワイト2...

MySQL トリガーの原理と使用例の分析

この記事では、例を使用して、MySQL トリガーの原理と使用方法を説明します。ご参考までに、詳細は以...

要素シャトルフレームのパフォーマンス最適化の実装

目次背景解決新しい質問高度な背景シャトル ボックスが大量のデータを処理すると、レンダリングされる D...

Vue で axios を使用して画像をアップロードするときに発生する問題

目次FormDataとは何ですか? vueとaxiosの協力による実践的な体験追加()セット()消去...

MySql8.0.19 インストールピットレコードを共有する

前回の記事ではMySql8.0.19のインストール手順を紹介しました。必要な方はクリックしてご覧くだ...

Tomcat で server.xml と content.xml を変更した後の自動復元の問題の解決方法

設定ファイルを server.xml と content.xml に書き込みます。サーバーを再起動す...