回答:
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の範囲のUNSIGNED DECIMAL列を作成することもできます。
MySQL DECIMALの詳細については、公式ドキュメントは常に優れたリソースです。
この情報はすべて、MySQL 5.0.3以降のバージョンに当てはまることを覚えておいてください。以前のバージョンを使用している場合は、本当にアップグレードする必要があります。
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]。負の値の場合、範囲外のエラーが返されます。同様に、符号なしFLOATおよびDOUBLEを作成できます。マニュアル:dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html
上記の答えは正しいようですが、それがどのように機能するかを理解するための簡単な説明です。
列がに設定されているとしますDECIMAL(13,4)。これは、列の合計サイズが13桁になることを意味し、そのうち4桁は精度表現に使用されます。
つまり、要約すると、その列の最大値は次のようになります。 999999999.9999