SQL Server RTM版本未四舍五入

我已将产品上传到Azure和SQL Server,但发现与Azure一起使用时确实有趣的问题。默认情况下,Azure提供了SQL Server的RTM版本,从而造成了此问题。

用于计算的RTM版本图像-屏幕截图显示了计算如何输出值。

第二个屏幕快照是我的本地SQL Server 2014-为什么RTM版本存在此问题?是否有任何设置或解决方案可以像SQL Server 2014中那样返回正确的值?

SQL Server RTM版本未四舍五入

SQL Server RTM版本未四舍五入

ooohwj 回答:SQL Server RTM版本未四舍五入

当转换为浮点数时,小数0.00750的值为7.4999999999999997E-3(尽管SSMS将显示0.0075)。使用SQLCMD,您可以看到实际值:

sqlcmd -Q"DECLARE @c float = 0.00750;SELECT @c as float,ROUND(@c,3) AS rounded;"

结果:

float                    rounded
------------------------ ------------------------
   7.4999999999999997E-3    7.0000000000000001E-3

如果将数据库(本地,Azure SQL数据库托管实例或Azure SQL数据库)的数据库兼容性级别更改为120(SQL 2016):

ALTER DATABASE YourDatabase SET COMPATIBILITY_LEVEL = 120;

并重复相同的查询,则结果会像SQL 2016实例那样错误地舍入:

float                    rounded
------------------------ ------------------------
   7.4999999999999997E-3    8.0000000000000002E-3

请记住,float是近似值,不能精确表示所有十进制值。因此,Azure SQL数据库是正确的舍入行为,但是可以根据需要使用数据库兼容性级别控制该行为,以提供向后兼容性。

本文链接:https://www.f2er.com/3147663.html

大家都在问