Sql

SQL Serverの数値、浮動小数点、小数の違い



Difference Between Numeric



解決:

使用 浮く また 本物 データ型 次の場合のみ によって提供される精度 10進数 (38桁まで)不十分

  • おおよその数値データ型は、指定された正確な値を格納しません 多くの人にとって 数字;彼らは保存します 非常に近い 値の概算。(Technet)



  • WHERE句の検索条件、特に=および演算子(Technet)でfloatまたはreal列を使用することは避けてください。

だから一般的には 10進数で提供される精度 あなたの数がそれに収まることができ、Floatのより小さなストレージスペース(そしておそらく速度)が重要でなく、異常な動作やおおよその数値タイプの問題に対処することは受け入れられない場合は、[10E38〜38桁]です。 一般的にDecimalを使用します



より有用な情報

  • 数値= 10進数(5〜17バイト)( ちょうど 数値データ型)
    • .NETでDecimalにマップされます
    • どちらもSQLサーバーのデフォルト(精度、スケール)パラメーターとして(18、0)を持っています
    • scale =小数点の右側に格納できる小数点以下の最大桁数。
    • money(8バイト)とsmallmoney(4バイト)も正確であり、Decimal In .NETにマップされ、小数点以下4桁(MSDN)であることに注意してください。
    • 10進数と数値(Transact-SQL)-MSDN
  • 実数(4バイト)( 近似 数値データ型)
    • .NETでシングルにマップされます
    • realのISOシノニムはfloat(24)です。
    • float and real(Transact-SQL)-MSDN
  • フロート(8バイト)( 近似 数値データ型)
    • .NETでDoubleにマップされます
  • 全て ちょうど 数値型は、使用されているプロセッサアーキテクチャの種類に関係なく、常に同じ結果を生成します。 または数の大きさ
  • floatデータ型に提供されるパラメーターは、を格納するために使用されるビット数を定義します。 浮動小数点数の仮数
  • 概算の数値データ型は通常、使用するストレージが少なく、速度が優れています(最大20倍)。また、.NETで変換された時期も考慮する必要があります。
    • C#のDecimal、Float、Doubleの違いは何ですか
    • 10進数と2倍の速度
    • SQL Server-.NETデータ型マッピング(MSDNから)

正確な数値データ型 おおよその数値データ型

主な情報源 :MCTSセルフペーストレーニングキット(試験70-433):Microsoft®SQLServer®2008データベース開発-第3章-テーブル、データ型、および宣言型データ整合性レッスン1-データ型の選択(ガイドライン)-93ページ




MSDNのガイドライン:10進数、浮動小数点、および実数のデータの使用

数値および10進数のデータ型のデフォルトの最大精度は38です。Transact-SQLでは、数値は10進数のデータ型と機能的に同等です。 データ値を指定どおりに正確に格納する必要がある場合は、decimalデータ型を使用して数値を10進数で格納します。

floatとrealの動作は、近似数値データ型に関するIEEE754仕様に従います。浮動小数点データ型と実数データ型はおおよその性質であるため、金融アプリケーション、丸めを伴う操作、または等価性チェックなど、正確な数値動作が必要な場合は、これらのデータ型を使用しないでください。代わりに、整数、小数、お金、または小額のデータ型を使用してください。 WHERE句の検索条件、特に=および演算子でfloat列または実列を使用することは避けてください。 浮動小数点列と実数列を>またはに制限することをお勧めします


データ型の優先順位が異なります

10進数数値 同じだ 機能的に しかし、まだあります データ型の優先順位 、場合によっては重要になる可能性があります。

SELECT SQL_VARIANT_PROPERTY(CAST(1 AS NUMERIC)+ CAST(1 AS DECIMAL)、 'basetype')

結果のデータ型は次のとおりです。 数値 かかるので データ型の優先順位

優先順位によるデータ型の網羅的なリスト:

参照リンク