0

これがlinqpadの結果です。

decimal d = .035m + .035m + .035m; 
d.Dump();
decimal.Round(d,2).Dump();
0.105
0.10

これが SMSS の結果です。

declare @d money
set @d = convert(money, .035) + convert(money, .035) + convert(money, .035)
select @d, round(@d,2)
(No column name)    (No column name)
0.105   0.11

何を与える?

4

2 に答える 2

1

正解は次のとおりです。

  • C# のroundは、中間点を最も近い偶数の整数に丸めます
  • T/SQL のラウンドは中点を切り上げます

以下の回答は間違っていますが、おそらく
有益 な SQL 定数 like 0.1is a decimalnot a float, like hvd コメントです。


C# では、接尾辞を使用し0.35mて正確なdecimal定数として入力していmます。

しかし、SQL では、0.35からfloatに変換していmoneyます。からの変換floatは正確ではありません。接頭辞 を使用して money タイプを入力する$と、C# と同じ結果が得られます。

declare @d money
set @d = $0.035 + $0.035 + $0.035
select @d, round(@d,2)

SQL Fiddle の例。

于 2013-02-06T18:23:18.593 に答える
0

@sgeddesは上記で答えました。デフォルトでは丸めのように見えます:stackoverflow.com/a/8844698/1073631-MidpointRounding.AwayFromZeroを追加してみてください。

于 2013-02-07T04:49:42.737 に答える