[英]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.