我正在尝试计算美元金额的折扣百分比。在 50% 的情况下,有时你会得到半分钱,我需要将其四舍五入到最接近的一分钱。
在Sql中,我的计算如下:
round(retail * 0.5, 2, 0)
如果我采用以下值,我会得到不同的结果:
不四舍五入我得到:
- 4.39 --> 2.195
- 2.49 --> 1.245
当四舍五入时我得到:
- 2.195 --> 2.19
- 1.245 --> 1.25
有人告诉我这是“银行家舍入”的一种形式,但似乎影响舍入方向的值是整数值。
我的问题是我期望最高值四舍五入到 2.20。如果这确实是银行家四舍五入,并且它受到此处整数值的影响,是否有人有一个例子来防止这种行为。如果不是银行家四舍五入,有人可以提供解释和可能的解决方案来获得正常的四舍五入行为吗?
提前致谢!
的数据类型是什么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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)