astel-labs.net

C#などのプログラミングTipsや雑記をつらつらと書くかもしれないブログです。

  • Home
RSS

SQL Server – money型とdecimal型を併用した金額計算

Posted on 2014年6月26日 by Nymphaea
No CommentsLeave a comment

自分用メモです。

SQL Server を利用して正確な金額計算を行う場合、SQL のデータ型は float 型や real 型を使用すると値が切り捨てられたり丸めたりされるため、0.1円単位で正確な計算を行わなければならない用途では使うことはできません。

金額計算を行う場合、SQL のデータ型は money(smallmoney) 型または decimal(numeric) 型を使用します。
ですが、金額であることを明示するため、金額のデータ型には money 型を使用し、パーセントなどの定数または変数の場合は decimal 型を使用するなど、使い分けるほうがよいでしょう。

また、金額計算を行うためにあらかじめ知っておかなければならない予備知識として、以下のことが挙げられます。
1.money 型と smallmoney 型の有効範囲
money(8バイト):-922,337,203,685,477.5808 ~ 922,337,203,685,477.5807
smallmoney(4バイト):– 214,748.3648 ~ 214,748.3647
※money データ型と smallmoney データ型は、表している通貨単位の 10,000 分の 1 までの精度を持ちます。

2.decimal 型の最大有効桁数は、整数部と小数部の合計が38桁以下になる必要があります。
※有効桁数が38桁を超えた場合、整数部での切り捨てが発生しないように小数部の有効桁数が丸められます。

3.decimal 型同士での計算を行う場合、有効桁数がどのように変化するかを知っておく必要があります。
※NUMERIC/DECIMAL の演算結果の精度とスケールの決定方法

4.Transact-SQL ステートメントでは、小数点の付いた定数は、必要最小限の有効桁数と小数点以下桁数で自動的に numeric 型の値に変換されます。たとえば、定数 12.345 は有効桁数が 5、小数点以下桁数が 3 の numeric 型に変換されます。

 

上記を踏まえ、金額計算を行う場合には切り捨てや丸めができる限り発生しないよう、金額データ同士の加減算と金額以外の定数や変数の計算は別に計算を行った後、最後にまとめて計算を行うなどの工夫が必要になる場合があります。

 

Categories: SQL Server

 

WindowsのプロダクトIDを取得する
SQL Server – IDENTITY指定列のIDリセット

コメントを残す コメントをキャンセル

コメントを投稿するにはログインしてください。

  • 2014年6月
    日 月 火 水 木 金 土
    1234567
    891011121314
    15161718192021
    22232425262728
    2930  
    « 5月   12月 »
  • 最近の投稿

    • raspberry pi に nginx をセットアップする
    • VSCode を日本語化する
    • raspberry pi に VSCode をインストールする
    • WindowsのプロダクトIDを取得する
    • SQL Server – money型とdecimal型を併用した金額計算
  • アーカイブ

    • 2020年3月
    • 2016年12月
    • 2014年6月
    • 2014年5月
    • 2013年7月
    • 2012年11月
    • 2012年7月
    • 2012年5月
    • 2012年4月
    • 2011年4月
    • 2011年1月
    • 2010年11月
    • 2010年10月
    • 2010年9月
    • 2010年8月
    • 2010年7月
    • 2010年6月
    • 2010年5月
    • 2010年4月
  • カテゴリー

    • C#
    • jQuery
    • OpenCV
    • raspberry pi
    • SharePoint
    • Silverlight
    • SQL Server
    • WCF
    • WPF
    • プログラミング
    • 未分類
    • 雑記
© astel-labs.net. Proudly Powered by WordPress | Nest Theme by YChong

このブログ内で公開されているソースコードおよびサンプルプログラムに関わるライセンスはすべて修正BSDライセンス(New BSD License)として公開しています。
但し、サンプルプログラムに含まれる外部アセンブリが同様のライセンスとは限りませんので、利用する前に必ずすべてのライセンスの確認を行ってください。