いくつかのプロパティがC#
ありdouble
、それらをSQL Serverのテーブルに格納したいのですが、double
型がないことに気付いたので、何を使用するのが最適ですか、decimal
またはfloat
?
これは緯度と経度の値を格納するため、最も正確な精度が必要です。
これまでの回答に感謝します。
いくつかのプロパティがC#
ありdouble
、それらをSQL Serverのテーブルに格納したいのですが、double
型がないことに気付いたので、何を使用するのが最適ですか、decimal
またはfloat
?
これは緯度と経度の値を格納するため、最も正確な精度が必要です。
これまでの回答に感謝します。
回答:
float
または、古い学校に行きたい場合:
real
float(53)も使用できますが、floatと同じ意味です。
( "real"は、float / float(53)ではなく、float(24)と同等です。)
小数(x、y)は SQL Serverのタイプは、あなたがしたいときのためにある正確な進数ではなく、(近似することができます)浮動小数点を。これは、128ビットの浮動小数点数に似たC#の「10進数」データ型とは対照的です。
MSSQLのfloat型は、.NETの64ビットdouble型と同等です。(2011年の私の元の回答では、仮数にわずかな違いがある可能性があると述べていましたが、2020年にテストしましたが、非常に小さい数値と非常に大きい数値の両方のバイナリ表現で100%互換性があるようです-https:/を参照してください/dotnetfiddle.net/wLX5Ox(私のテスト用)。
混乱を招くために、C#の "float"は32ビットにすぎないため、SQLでは、float / float(53)よりもMSSQLのreal / float(24)型に相当します。
特定の使用例では... 緯度と経度を約1メートルの精度で表すために必要なのは小数点以下5桁であり、度数は小数点の前に最大3桁必要です。Float(24)またはdecimal(8,5)はMSSQLでのニーズに最適であり、C#でのfloatの使用で十分です。doubleは必要ありません。実際、ユーザーは、乗車時に重要でない数字の束を用意するのではなく、小数点以下5桁に四捨五入してくれることに感謝するでしょう。
floatは最も近いものです。
OPで言及した緯度/経度の場合。
メートルは緯度の1 / 40,000,000、1秒は約30メートルです。Float / doubleは15の有効数字を与えます。いくつかの速くて危険な暗算では...丸め/近似誤差は、この塗りつぶしの長さとほぼ同じになります-> "。"
これをFLOAT(53)にマップする必要があります。これがLINQ to SQLが行うことです。
float
SQL Serverでは、実際には[編集:ほとんど](C#の意味で)「倍精度」の精度があります。
float
はの同義語ですfloat(53)
。53は仮数のビットです。
.NET double
は仮数に54ビットを使用します。
SQLサーバーの場合:
Decimal Typeは128ビットの符号付き数値ですFloatは64ビットの符号付き数値です。
本当の答えはFloatです。10進数については間違っていました。
その理由は、小数を使用する場合、小数型の64ビットを埋めることは決してないためです。
ただし、int型を使用しようとしても、decimalではエラーは発生しません。
これは、タイプの優れた参照チャートです。
選ぶことができるように聞こえます。floatを選択すると、11桁の精度が失われる可能性があります。それが許容できる場合は、それを実行してください。明らかにLinqの設計者は、これは良いトレードオフであると考えていました。
ただし、アプリケーションで追加の桁が必要な場合は、10進数を使用してください。10進数(正しく実装)は、フロートよりもはるかに正確です。10進数から2進数への変換や、その逆の変換はありません。
A はSQLサーバーをFloat
表しdouble
ます。Visual StudioのC#のコーディングから証明を見つけることができます。ここでは、SQLサーバーとC#でOvertime
として宣言しましたFloat
。したがって、私は変換することができます
int diff=4;
attendance.OverTime = Convert.ToDouble(diff);
ここOverTime
に宣言されていますfloat type