データベースにお金の価値を保存する最良の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/618056

  •  03-07-2019
  •  | 
  •  

質問

データベースに金銭関連のフィールドをいくつか保存する必要がありますが、 money decimal の間で使用するデータ型がわかりません。

役に立ちましたか?

解決

10進数とお金はかなり信頼できるはずです。 (継承されたアプリケーションからの痛みを伴う個人的な経験から)保証できるのは、フロートを使用しないです!

他のヒント

常にDecimalを使用します。以前にMONEYを使用したことはありません。

最近、あなたが面白いと思うかもしれないSqlサーバーの小数対お金のデータ型に関する記事を見つけました:

マネーvs 10進数

また、moneyデータ型を使用して計算を実行すると、必ずしも正確な結果が得られないようです:クリック

過去に私がやってきたことは、INTフィールドを使用して、金額をセント(ユーロセント/ドルセント)で保存することです。

精度とスケールに帰着すると思います。 IIRC、moneyは4dpです。それで問題なければ、decimalが意図を表します。さらに制御したい場合は、特定の精度とスケールで<=>を使用してください。

アプリケーションによって異なります!!! 私は通常、価格が小数点以下5桁まで重要であると考えている金融サービスで働いています。もちろん、これは3.12345ペンス/セントで数百万を購入するとかなりの金額になります。 一部のアプリケーションは、これを処理する独自のsqlタイプを提供します。

一方、これは必要ないかもしれません。 <!> lt;ユーモア<!> gt; 請負業者の利率は常に最も近い<!>#163; 100に丸められているように見えましたが、現在のクレジットクランチでは現在、最も近い<!>#163; 25ポンドになっているようです。 <!> lt; /ユーモア<!> gt;

利用可能なデータ型に基づいて考えを調整しないでください。むしろ、要件を分析してから、どのデータ型が最適かを確認してください。 浮動小数点数のバイナリバージョンを格納するアーキテクチャの制限を考慮すると、Floatはいつでも最悪の選択です。 マネーは標準ユニットであり、マネー関連の操作を処理するためのサポートが確実に追加されます。 小数の場合は、すべてを処理する必要がありますが、小数型を処理しているのは自分だけであることがわかっているため、他の2つのデータ型を使用しても驚くことはありません。

小数を使用し、必要と思われるよりも多くの小数位を使用して、計算が正しいようにします。お金は常に計算で正しい結果を返しません。これらは不正確なデータ型であり、計算が間違っている可能性があるため(特に複雑になるため)、floatまたはrealを使用しないでください。

近似値や浮動小数点値による変更を必要としない一部のデータ(お金など)については、データが「浮動」することはなく、小数点の両側が固定されていることを確認する必要があります。
安全な簡単な方法の1つは、値をINTEGERデータ型に変換して値を設定し、値を取得する間、小数点が適切な位置に配置されるようにすることです。
例:
1. 240.10ドルをデータベースに保存します。
2.それを純粋な整数形式24010に変換します(10進数のシフトだけを知っています)。
3.適切な10進数の状態に戻します。右から2桁目に小数点を配置します。 240.10ドル

したがって、データベースにある間は、固定整数形式になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top