Bil*_*ous 1 sql t-sql sql-server
我刚刚在TSQL中尝试了"between"语句,下面的代码返回"true":
declare @Value as decimal
declare @Upper as decimal
declare @Lower as decimal
set @Value = 20.1
set @Lower = 10.0
set @Upper = 20.0
select
case
when @Value between @Lower and @Upper then 'true'
else 'false'
end as Result
Run Code Online (Sandbox Code Playgroud)
如果我将@Value更改为20.5,结果为"false",但20.4返回"true".似乎TSQL使用"银行家舍入"来表示十进制值.
如果我将变量更改为"money",我会得到预期的结果,即@Value = 20.1返回"false".
只是为了澄清发生了什么,如果你只是打印你的变量,你会发现它们的值分别是20,10和20.
decimal默认的精度和比例是18和0,所以decimal= decimal(18,0).这就是你在那里丢失小数的原因.你没有这个问题,money因为它具有4位小数的精度.
资料来源:https://msdn.microsoft.com/en-us/library/ms187746.aspx
SQL没有使用银行家的舍入..5总是向上取整:20.5 -> 21,21.5 -> 22.随着银行家的四舍五入,20.5将四舍五入到20.