この単純な計算結果に小数、浮動小数点数、または倍数を使用する必要がありますか?

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

質問

本当に簡単な計算をいくつか行って、結果をMS SQL2008 DBに保存しています。

1 <!> lt;-<!> gt; 5の間のバイト値であるいくつかの数字を平均化しています。おそらく小数点以下2桁のみを記録したいと思います。私は小数第2位の丸めを気にしません(例:1.155 == 1.5または1.6 ..あまりにも段階的ではありません)。

だから..平均結果をfloat、decimal、doubleとして保存する必要がありますか?

LINQが返すものを確認すると、3つの値すべてを返すことができます!

最後に、関連するSQLデータ型フィールドもどうなります。

乾杯!

役に立ちましたか?

解決

必要なのはDECIMALデータ型です:

declare @val decimal(10,2)
select @val = 10.155
select @val

値を入力するとき、組み込みの丸めに依存するか、どの丸めを使用するかを明示的に決定できます。

select val = round(10.155, 2, 0) -- rounded
select val = round(10.155, 2, 1) -- truncated

Decimal(10,2)は、10桁を使用でき、そのうち2桁は小数点の後にあると解釈されることを意味します。つまり、decimal(4,2)に含めることができる最大数は99.99です。 100に設定しようとすると、算術オーバーフローが発生します。

他のヒント

DoubleではなくFloatを、おそらくDecimalではなくFloatを選択します。 IdはFloatalthに行きますが、すべて同じ結果になるはずです。

フロート <!> ampのこれら2つのページをご覧ください。 ; 10進数

10進数は主に通貨に使用されます。それは機能しますが、人々は混乱を感じるかもしれません。この場合、フロートの方が良い選択だと思います。

10進数-これは最も単純ですが、いずれのメンテンでもジョブを実行します

できるだけ小さなスペースを使用して結果を保存する場合は、おそらく次のようなことができます(擬似コード):

integer = ( sum(all_values) / all_values.count().float ) * 100;

これにより、平均3.52の値352が得られるため、整数として格納できます(バイトは十分に大きいと思います)。表示する場合は100で除算します。

一方、平均値の保存を気にしない場合、フロート値を使用する方が高速です。 (両方をテストして、システムで実際に最も速いものを確認してください。)

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