この単純な計算結果に小数、浮動小数点数、または倍数を使用する必要がありますか?
-
19-08-2019 - |
質問
本当に簡単な計算をいくつか行って、結果を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に設定しようとすると、算術オーバーフローが発生します。
他のヒント
10進数は主に通貨に使用されます。それは機能しますが、人々は混乱を感じるかもしれません。この場合、フロートの方が良い選択だと思います。
10進数-これは最も単純ですが、いずれのメンテンでもジョブを実行します
できるだけ小さなスペースを使用して結果を保存する場合は、おそらく次のようなことができます(擬似コード):
integer = ( sum(all_values) / all_values.count().float ) * 100;
これにより、平均3.52の値352が得られるため、整数として格納できます(バイトは十分に大きいと思います)。表示する場合は100で除算します。
一方、平均値の保存を気にしない場合、フロート値を使用する方が高速です。 (両方をテストして、システムで実際に最も速いものを確認してください。)