2011-10-21 6 views
4

私はドル金額のパーセント値を計算しようとしています。 50%で、半分のペニーが得られることがあります。それを最も近いセントに丸める必要があります。なぜSQL Server 2000のTSQLは小数点以下を丸めますか?

  • 4.39
  • 2.49

:私は、次の値をとる場合

round(retail * 0.5, 2, 0)

が、私は異なる結果を得る:次のようにSQLで

は、私の計算があります包まれていない私は得る:

  • 4.39 - > 2.195
  • 2.49 - > 1.245

丸めたとき私が取得:

  • 2.195 - > 2.19
  • 1.245 - > 1.25

私はこれが「銀行家の丸め」の一形態だと言われていますが、 keは、丸め方向に影響する値が整数値です。

私の問題は、最高値が2.20に丸められることです。これが実際に銀行家の丸めであり、ここで整数値の影響を受けている場合、誰でもこの動作を防ぐための例がありますか?それは銀行家の丸めではない場合、誰かが説明を提供し、潜在的には通常の丸めの動作を得るための解決策を提供することができますか?

ありがとうございます!

+0

だけでなく、私は、SQL Server 2008およびIでこれを試してみました2.200を得る;あなたはこれを試したが、SQL 2000であなたを助けることができない:選択ラウンド(4.39 * 0.5,2,0)=>私の結果= 2.2。 – Pleun

答えて

3

を説明していますか?私はこれをSQL 2000でテストすることはできませんが、SQL 2008 R2ではfloatを使用すると同様の結果が表示されます。

float:   4.39 --> 2.195, rounds to 2.19 
       2.49 --> 1.245, rounds to 1.25 

money:   4.39 --> 2.195, rounds to 2.20 
       2.49 --> 1.245, rounds to 1.25 

decimal(5,2): 4.39 --> 2.195, rounds to 2.20 
       2.49 --> 1.245, rounds to 1.25 

floatによって作成された近似値を表示するには、あなたがdecimal(20,19)にキャストすることができますし、それがこのように丸めていますなぜそれが透明になる:

4.39 * 0.5 --> 2.1949999999999999000 
2.49 * 0.5 --> 1.2450000000000001000 
+0

私はフロートを使用していました。私は他のタイプでテストします。私はそれをするとは思わなかった。ありがとう! – IronicMuffin

+0

問題ありません。これは 'float'のようなおおよそのデータ型の代わりに' money'や 'decimal'を使う理由の良い例です。 –

関連する問題