320

MySQL データベースに多くのレコードを保存したいと考えています。それらのすべてにお金の値が含まれています。しかし、それぞれに何桁が挿入されるかはわかりません。
この目的のためにどのデータ型を使用する必要がありますか?
VARCHARまたはINT (またはその他の数値データ型)?

4

12 に答える 12

437

お金は正確な表現が必要なので、 のように近似的なデータ型を使用しないでくださいfloat。次のような固定小数点数値データ型を使用できます

decimal(15,2)
  • 15は精度です (小数点以下を含む値の全長)
  • 2は小数点以下の桁数です

MySQL 数値型を参照してください。

これらの型は、通貨データなど、正確な精度を維持することが重要な場合に使用されます。

于 2012-10-23T12:26:37.320 に答える
40

私は を使用し、値を 100 で乗算してBIGINT格納することを好み、整数になるようにします。

たとえば、 の通貨値を表すには93.49、値を として保存し、 100 で割って9349表示できる値を表示します。これにより、使用するストレージ スペースが少なくなります。

注意:
ほとんどの場合、乗算は実行しません。実行currency * currencyする場合は、結果を 100 で除算して格納し、適切な精度に戻します。

于 2014-09-03T07:14:13.163 に答える
17

アプリケーションが 1 兆ドルまでの金額を処理する必要がある場合、これは機能するはずです: 13,2 GAAP (一般に認められた会計原則) に準拠する必要がある場合は、次を使用します: 13,4

通常、出力を 13,2 に丸める前に、13,4 で金額を合計する必要があります。

于 2014-04-28T23:40:05.840 に答える
8

を使用しますdouble

*あえぎ*

なんで?

小数点の位置に制約がなく、任意の 15 桁の数値を表すことができるためです。すべてわずか 8 バイトです。

したがって、次を表すことができます。

  • 0.123456789012345
  • 123456789012345.0

...そしてその間の何か。

これは、グローバル通貨を扱っており、遭遇する可能性のあるさまざまな小数点以下の桁数を格納できるため便利ですdouble

1 つのdoubleフィールドで、日本円で 999,999,999,999,999、米ドルで 9,999,999,999,999.99、ビットコインで 9,999,999.99999999 を表すことができます。

で同じことをしようとすると、 14 バイトのコストdecimalが必要になります。decimal(30, 15)

注意事項

もちろん、使用doubleには警告がないわけではありません。

ただし、一部の人が指摘する傾向があるように、精度が失われるわけではありません。それdouble自体は内部的に 10 進法のシステムに対して正確ではないかもしれませんが、データベースから取得した値を小数点以下の有効桁数に丸めることで正確にすることができます。必要ならそれで。(例: 出力する予定で、基数 10 の表現が必要な場合。)

警告は、それを使って算術を実行するときはいつでも、結果を正規化する必要があります (有効な小数点以下を四捨五入することによって)。

  1. その上で比較を実行します。
  2. データベースに書き戻します。

もう 1 つの警告は、decimal(m, d)データベースがプログラムが桁数を超える数値を挿入するのを防止する場合とは異なり、.mにはそのような検証が存在しないことdoubleです。プログラムは、ユーザーが入力した 20 桁の値を挿入する可能性があり、不正確な金額として黙って記録されることになります。

于 2018-04-03T07:12:28.637 に答える
6

GAAP 準拠が必要な場合、または小数点以下 4 桁が必要な場合:

DECIMAL(13, 4) 次の最大値をサポートします。

$999,999,999.9999

それ以外の場合、小数点以下 2 桁で十分な場合: DECIMAL(13,2)

ソース: https://rietta.com/blog/best-data-types-for-currencymoney-in/

于 2019-10-25T21:01:41.647 に答える
4

使ってみて

Decimal(19,4)

これは通常、他のすべてのDBでも機能します

于 2016-03-05T09:40:03.207 に答える
0

Visual Basic や Office の「Currency」のように、10000 を乗算して BIGINT として格納します。https://msdn.microsoft.com/en-us/library/office/gg264338.aspxを参照してください

于 2015-11-08T13:09:48.180 に答える