5

私の知る限り、丸め数が5の場合、数学の丸めは以下のように機能するはずです。

2.435 => 2.44 (Round Up, if rounding to digit(3) is odd number)
2.445 => 2.44 (Round Down, if rounding to digit(4) is even number)

うまく合算すれば、

2.435 + 2.445 =  4.88
2.44 + 2.44 = 4.88 

私は.Netでも丸めがこのように機能すると確信しています。

しかし、SQL サーバーでは、5 は常に切り上げられますが、これは数学的に正しくありません。

SELECT round(2.345, 2)  = 2.35
SELECT round(2.335, 2) => 2.34

これにより、丸められた値の合計に 1 セントの不一致が生じます。

2.345 + 2.335 = 4.68
2.35 + 2.34 = 4.69 => which is not correct

私はこれを10進数とお金のデータ型で試しました。

私は何か間違ったことをしていますか?これに対する回避策はありますか?

4

3 に答える 3

6

Banker's Roundingを探しています。これは C# の既定の丸めですが、SQL Server ROUND() の動作ではありません。

Sql Server 2000 の TSQL が小数点以下を一貫して丸めないのはなぜですか?を参照してください。http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/sql-server-rounding-methodsおよびhttp://www.chrispoulter.com/blog/post/rounding-decimals-using-netと同様に-and-t-sql

于 2013-09-17T10:38:54.117 に答える
5

数学的には 5 で切り上げることは正しいことであり、基本的な数学で最も一般的に使用される種類の丸めでもあります。他のタイプの丸めも有効ですが、基本的な数学ではありませんが、0.5 が論争の数であることが多いため、特定の分野でより頻繁に使用されます。

数学的に丸めと呼ばれるものは、実際にはバンカーの丸めであり、金融​​ビジネスで使用される丸めのタイプです。

于 2013-09-17T10:38:10.387 に答える