web-dev-qa-db-ja.com

mysqlに金額を保存する

3.50をmysqlテーブルに保存したい。私はそれを保存するフロートを持っていますが、3.50ではなく3.5として保存します。どうすれば末尾のゼロを取得できますか?

61
David

お金の値を浮動小数点数として保存せず、DECIMALまたはNUMERICタイプを使用します。

MySQL数値型のドキュメント

編集と説明:

浮動小数点値は丸め誤差に対して脆弱です。精度が限られているため、10.00の代わりに9.99のみを取得することを気にしない限り、DECIMAL/NUMERICを使用する必要があります。

94
Morfildur

計算で丸め誤差が発生する可能性があるため、お金を浮動小数点数として保存することは一般に良い考えではありません。

代わりにDECIMAL(10,2)の使用を検討してください。

37
Andy Joiner

保存する場所が3.5、3.50、さらには3.500であるかどうかは本当に重要ですか?

本当に重要なのは、データベースから取得した後の表示方法です。

または、私はここに何かが欠けていますか?

また、フロートを使用しないで、小数を使用します。フロートにはあらゆる種類の丸めの問題があり、それほど大きくありません。

19
graham.reeds

値を保存するには、DECIMAL(10,2)フィールドを使用できます。次に、 [〜#〜] format [〜 #〜] 関数:

SELECT FORMAT(`price`, 2) FROM `table` WHERE 1 = 1
17
Thiago Belem

なぜ「3.50」をデータベースに保存したいのですか?データベースに関する限り、3.5 == 3.50 == 3.5000。

プレゼンテーションや図/日付などのフォーマットは、データベースではなくアプリケーションで行う必要があります。

5
Andy Shellam

DECIMALまたはNUMERIC型を使用する場合、たとえばDECIMAL(18、2)として宣言できます。これは、0であったとしても2桁の小数を強制します。予想される大きな値に応じて、最初のパラメーターの値を変更できます。

5
MatsT