我正在尝试计算美元金额的折扣百分比。在50%时,有时你得到半分钱,我需要把它四舍五入到最接近的分数。
在Sql中,我的计算如下:
round(retail * 0.5, 2, 0)
如果我采用以下值,我会得到不同的结果:
我得到了:
四舍五入时我得到:
我被告知这是“银行家舍入”的一种形式,但似乎影响舍入方向的值是整数值。
我的问题是我希望最高值可以舍入到2.20。如果这确实是银行家舍入,并且它受到整数值的影响,那么是否有人有一个阻止此行为的示例。如果不是银行家四舍五入,有人可以提供解释并可能解决方案以获得正常的舍入行为吗?
提前致谢!
答案 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银行家四舍五入