データベースにいくつかのお金関連のフィールドを保存する必要がありますが、お金と10進数の間で使用するデータ型がわかりません。
小数とお金はかなり信頼できるはずです。 (継承されたアプリケーションからの苦痛な個人的な経験から)私があなたに保証できるのはしないでください floatを使用してください!
私はそれが精度と規模に帰着すると思います。 IIRC、money
は4dpです。それでよければ、money
はあなたの意図を表しています。より詳細な制御が必要な場合は、特定の精度とスケールでdecimal
を使用してください。
それはあなたのアプリケーションに依存します!!!私は金融サービスで働いており、通常、価格はポイントから小数点以下5桁まで重要であると考えています。もちろん、3.12345ペンス/セントで数百万を購入するとかなりの金額になります。一部のアプリケーションは、これを処理するために独自のSQLタイプを提供します。
一方で、これは必要ないかもしれません。 <ユーモア>請負業者の料金は常に100ポンドに最も近いように丸められているように見えましたが、現在の信用収縮では25ポンドに最も近いようです。 </ユーモア>
利用可能なデータ型に基づいて考えを調整しないでください。むしろ、要件を分析してから、どのデータ型が最適かを確認してください。浮動小数点数のバイナリバージョンを格納する際のアーキテクチャの制限を考慮すると、浮動小数点はいつでも最悪の選択です。 Moneyは標準の単位であり、Money関連の操作を処理するためのサポートが確実に増えます。 10進数の場合、すべてを処理する必要がありますが、10進数型を処理しているのはあなただけであることがわかっているため、他の2つのデータ型で得られる驚きはありません。
概算や浮動小数点値による変更が必要ない一部のデータ(お金など)の場合、データが「浮動」しないようにする必要があります。小数点の両側で固定する必要があります。
安全を確保する簡単な方法の1つは、INTEGERデータ型に変換して値を設定し、値を取得するときに小数点が適切な場所に配置されていることを確認することです。
例えば。
1。 $ 240.10をデータベースに保存します。
2。それを純粋な整数形式に変換します:24010(10進数のシフトだけを知っています)。
3。適切な10進状態に戻します。右から2桁に小数点を配置します。 240.10ドル
したがって、データベース内にある間は、厳密な整数形式になります。
小数点以下を使用し、必要と思われるよりも多くの小数点以下の桁数を使用して、計算が正しくなるようにします。お金は常に計算で正しい結果を返すわけではありません。これらは不正確なデータ型であり、計算が間違ってしまう可能性があるため、いかなる状況でもfloatまたはrealを使用しないでください(特に複雑になるため)。