小编典典

为什么在SQL Server 2000上的TSQL会舍入小数位数不一致?

sql

我正在尝试计算美元金额的折算百分比。在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。如果这确实是银行家的四舍五入,并且受此处的整数值影响,请问有人有防止这种行为的示例。如果不是银行家四舍五入,请问有人能提供解释并可能提供解决办法,以使正常的四舍五入行为成为可能吗?

提前致谢!


阅读 210

收藏
2021-04-22

共1个答案

小编典典

什么是数据类型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
2021-04-22