为什么Sql Server 2000上的TSQL循环小数不一致?

时间:2011-10-21 17:14:27

标签: sql sql-server tsql sql-server-2000 rounding

我正在尝试计算美元金额的折扣百分比。在50%时,有时你得到半分钱,我需要把它四舍五入到最接近的分数。

在Sql中,我的计算如下:

round(retail * 0.5, 2, 0)

如果我采用以下值,我会得到不同的结果:

  • 4.39
  • 2.49

我得到了:

  • 4.39 - > 2.195
  • 2.49 - > 1.245

四舍五入时我得到:

  • 2.195 - > 2.19
  • 1.245 - > 1.25

我被告知这是“银行家舍入”的一种形式,但似乎影响舍入方向的值是整数值。

我的问题是我希望最高值可以舍入到2.20。如果这确实是银行家舍入,并且它受到整数值的影响,那么是否有人有一个阻止此行为的示例。如果不是银行家四舍五入,有人可以提供解释并可能解决方案以获得正常的舍入行为吗?

提前致谢!

2 个答案:

答案 0 :(得分:5)

retail的数据类型是什么?我无法在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

答案 1 :(得分:0)

在这里看一些舍入方法:解释SQL Server Rounding Methods银行家四舍五入