簡體   English   中英

SQL 服務器 RTM 版本未四舍五入

[英]SQL Server RTM version is not rounding up number

我已將我的產品上傳到 Azure 和 SQL 服務器,但我發現與 Azure 一起使用的問題非常有趣。 Azure 默認提供 RTM 版本的 SQL 服務器,這是造成此問題的原因。

用於計算的 RTM 版本圖像 - 屏幕截圖顯示了計算如何輸出值。

第二張截圖是我本地的 SQL Server 2014 - 那么為什么 RTM 版本會有這個問題呢? 是否有任何設置或解決方案可以返回正確的值,例如 SQL Server 2014?

圖 1

圖 2

當轉換為浮點數時,十進制 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

If you change the database compatibility level to 120 (SQL 2016) of the database (on-prem, Azure SQL Database Managed Instance, or Azure SQL Database):

ALTER DATABASE YourDatabase SET COMPATIBILITY_LEVEL = 120;

並重復相同的查詢,然后結果被錯誤地四舍五入,就像您的 SQL 2016 實例一樣:

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

請記住,浮點數是近似值,不能准確表示所有十進制值。 所以 Azure SQL 數據庫是正確的舍入行為,但如果需要,可以使用數據庫兼容級別控制該行為以提供向后兼容性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM