DOUBLE列はない DECIMAL列と同じで、問題が発生します 財務データにDOUBLE列を使用する場合。
DOUBLEは、実際には FLOAT の倍精度(32ビットではなく64ビット)バージョンです。 。浮動小数点数は、実数 のおおよその表現です。 そしてそれらは正確ではありません。実際、0.01のような単純な数値は、FLOATまたはDOUBLEタイプでは正確に表現されていません。
DECIMAL列は正確な表現ですが、可能な数の範囲がはるかに狭い場合は、より多くのスペースを占有します。あなたが尋ねたように0.0001から99.9999までの値を保持できる列を作成するには、次のステートメントが必要になります
CREATE TABLE your_table
(
your_column DECIMAL(6,4) NOT NULL
);
列の定義は、DECIMAL(M、D)の形式に従います。ここで M は最大桁数です(精度 )および D は小数点の右側の桁数です(スケール 。
これは、前のコマンドが-99.9999から99.9999までの値を受け入れる列を作成することを意味します。 0.0000から99.9999の範囲のUNSIGNEDDECIMAL列を作成することもできます。
例として、-9999.99から9999.99までの値を受け入れる列が必要な場合、コマンドはDECIMAL(6,2)
になります。 。ご覧のとおり、引き続き精度を使用しています 6の場合、ただしスケールのみを許可します の2。
MySQL DECIMALの詳細については、公式ドキュメントを参照してください。 常に素晴らしいリソースです。
この情報はすべて、MySQL5.0.3以降のバージョンに当てはまることに注意してください。以前のバージョンを使用している場合は、本当にアップグレードする必要があります。
MySQL8.0.17以降のアップデート
署名なしは非推奨です FLOAT、DOUBLE、およびDECIMAL列の場合。