12

この質問はこれまで何度も聞かれましたが、相反する意見を見つけたので、より統一された結論を期待して、もう一度取り上げたいと思いました。

データベースに通貨の値を保存したいのですが。すべてのエントリが同じタイプの通貨(たとえばUSD)であり、正の値と負の値の両方が許可されていると仮定します。

私の最初の考えは、関連する通貨の最小単位で符号付き整数として値を格納することでした。たとえば、値$ 1.25を保存する場合125、USDの最小単位は$ 0.01であるため、データベースに挿入します。このメソッドの良いところは、MySQLが自動的に最も近い整数に丸められることです。たとえば、ドルの値が$ 1.259の場合、を挿入でき125.9ます。これは自動的に丸められ、126または$1.26として格納されます。

それで、あなたはどう思いますか?これは健全なアプローチですか、それともより良い方法がありますか?

4

2 に答える 2

13

財務データは次のように保存できますDECIMAL(p,s)。ここで、pは有効桁数、sはスケール(小数点の右側の桁数)です。MySQLのドキュメントを参照してください。

また、O'Reillyの高性能MySQL、第3章から。

「...DECIMALは、小数の正確な結果が必要な場合にのみ使用する必要があります。たとえば、財務データを保存する場合などです。」

O'ReillyのLearningMySQLから:

DECIMALは、「...一般的に使用される数値タイプです。給与や距離などの固定小数点数を格納します...」

そしてMySQLポケットリファレンス

DECIMAL「...金銭的価値など、精度が重要な浮動小数点数を格納します。」

于 2012-06-08T17:03:01.367 に答える
2

あなたが説明するアプローチに問題はありません。この質問に関しては、正しいことも悪いこともありません。

$値をユーザーに表示するには、常に除算演算または何らかのフォーマットを実行する必要があることに注意する必要があります。

すべてがセントまたはドルであった場合、数式/計算をデバッグする方が簡単ですか?値をセントまたはドルで表示しますか?等

シンプルに保ちますが、どちらの方法でも小数を使用する必要があります。

于 2012-06-08T16:57:16.810 に答える