gpt4 book ai didi

sql - 为什么 Sql Server 2000 上的 TSQL 对小数点的舍入不一致?

转载 作者:行者123 更新时间:2023-12-03 02:48:02 25 4
gpt4 key购买 nike

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

在Sql中,我的计算如下:

圆形(零售 * 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。如果这确实是银行家四舍五入,并且它受到此处整数值的影响,是否有人有一个例子来防止这种行为。如果不是银行家四舍五入,有人可以提供解释和可能的解决方案来获得正常的四舍五入行为吗?

提前致谢!

最佳答案

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

关于sql - 为什么 Sql Server 2000 上的 TSQL 对小数点的舍入不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7852892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com