データベースにいくつかのお金関連のフィールドを保存する必要がありますが、 moneyとdecimalの間で使用するデータ型がわかりません。
7 に答える
それはあなたのアプリケーションに依存!!! 私は通常、価格が小数点以下 5 桁まで重要であると考える金融サービスで働いています。一部のアプリケーションは、これを処理するために独自の SQL タイプを提供します。
一方、これは必要ない場合もあります。<ユーモア> 請負業者のレートは常に 100 ポンド単位で四捨五入されているように見えましたが、現在の信用危機では 25 ポンド単位で表示されているようです。</ユーモア>
利用可能なデータ型に基づいて考えを調整しないでください。むしろ、要件を分析してから、どのデータ型が最適かを確認してください。Float は、浮動小数点数のバイナリ バージョンを格納する際のアーキテクチャの制限を考慮すると、常に最悪の選択です。お金は標準的な単位であり、お金に関連する操作を処理するためのサポートが確実に増えます。10 進数の場合、すべてを処理する必要がありますが、10 進数型を処理するのは自分だけであることがわかっているため、他の 2 つのデータ型で驚くことはありません。
小数を使用し、必要と思われるよりも多くの小数点以下の桁数を使用して、計算が正しくなるようにします。Money は、計算で常に正しい結果を返すとは限りません。float や real は不正確なデータ型であり、計算が正しく行われない可能性があるため (特に複雑になると)、絶対に使用しないでください。
浮動小数点値による概算や変更を必要としない一部のデータ (お金など) については、データが決して「浮動」していないことを確認する必要があります。小数点の両側で厳密でなければなりません。
安全を確保する簡単な方法の 1 つは、値を INTEGER データ型に変換して値を取得し、値を取得するときに小数点が適切な位置に配置されていることを確認することです。
例
1. $240.10 をデータベースに保存します。
2. それを純粋な整数形式に変換します: 24010 (これは 10 進数の単なるシフトです)。
3. 適切な 10 進数の状態に戻します。小数点を右から 2 桁に配置します。$240.10
したがって、データベースにある間は、厳密な整数形式になります。