簡體   English   中英

SQL 2008 Math在WHERE子句中失敗

[英]SQL 2008 Math is failing in WHERE clause

使用Microsoft SQL Server 2008.我有一個利率表。 我手動驗證了我正在嘗試選擇的數據確實存在於表中。

這會返回記錄:

SELECT *
  FROM [MyTable]
  WHERE [Rate]=3.99/100

這不會返回記錄:

SELECT *
  FROM [MyTable]
  WHERE [Rate]*100=3.99

這是真正混亂的部分:據我所知,這只發生在Rate字段包含值.035.03625.0399

任何人都可以告訴我為什么第二個實例不起作用? 該表具有ID字段(PK),並且Rate字段為FLOAT 如果您需要更多信息,請與我們聯系。

您應該使用十進制非浮點數來計算利率。 float是不精確的,你發現你會遇到舍入錯誤!

在我的機器上

WITH [MyTable]([Rate])
     AS (SELECT CAST(.0399 AS FLOAT))
SELECT [Rate] * 100,
       CASE
         WHEN [Rate] * 100 = 3.99 THEN 'Y' ELSE 'N'
       END AS [= 3.99],
       CASE
         WHEN [Rate] * 100 > 3.989999999999999 THEN 'Y' ELSE 'N'
       END AS [> 3.989999999999999],
       CASE
         WHEN [Rate] * 100 < 3.99 THEN 'Y' ELSE 'N'
       END AS [< 3.99]
FROM   [MyTable]  

返回

                       = 3.99 > 3.989999999999999 < 3.99
---------------------- ------ ------------------- ------
3.99                   N      Y                   Y

強制性鏈接: 每個計算機科學家應該知道的浮點運算

暫無
暫無

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

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