Javaと情熱のあいだ

カステラとドーナツと珈琲

SQL Serverのdecimal 型とfloat型 についてのメモ

SQL Serverのテーブルで小数型を扱う場合decimal型とfloat型のどちらを使用するべきかについてのメモ。
MSDNを見るとそれっぽい事が書いてある箇所が有るには有るが、状況に応じて使い分けるべきなんでしょう。

浮動小数点型データと実数型データの使用

float 型と real 型を概数型と呼びます。float 型と real 型の動作は、概数型についての IEEE 754 仕様に従います。

概数型では、多くの場合、指定されたとおり正確な値が格納されません。正確な値にきわめて近い概数が格納されます。多くのアプリケーションでは指定した値と格納される概数のわずかな差は問題にはなりません。ただし、その差が問題になる場合もあります。float 型と real 型にはこのような概数の性質があるので、財務アプリケーション、丸めが行われる演算、等価性のチェックなど、正確な数値動作が必要な場合には、これらのデータ型を使用しないでください。代わりに、int 型、decimal 型、money 型、smallmoney 型を使用してください。

WHERE 句の検索条件、特に、= 演算子、<> 演算子では float 型や real 型を使用しないでください。float 列や real 列の比較を、> 比較または < 比較に限定することをお勧めします。

IEEE 754 仕様では、一番近い値に丸める、切り上げる、切り捨てる、0 に丸める、の 4 つの丸めモードがあります。Microsoft SQL Server では切り上げが使用されます。数値はすべて保証された有効桁数までは正確ですが、得られる浮動小数点値に多少の差が生じることがあります。浮動小数点数の 2 進表現では、さまざまな丸め方法が使われる可能性があるため、浮動小数点値を正確な値として扱うことは不可能です。