Red*_*ish 3 sql sql-server-2008
使用Microsoft SQL Server 2008.我有一个利率表.我已手动验证我正在尝试选择的数据是否存在于表中.
这会返回记录:
SELECT *
FROM [MyTable]
WHERE [Rate]=3.99/100
Run Code Online (Sandbox Code Playgroud)
这不会返回记录:
SELECT *
FROM [MyTable]
WHERE [Rate]*100=3.99
Run Code Online (Sandbox Code Playgroud)
这里是真的搞砸了一部分:据我所知,在速率字段包含的值,这只是发生.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]
Run Code Online (Sandbox Code Playgroud)
返回
= 3.99 > 3.989999999999999 < 3.99
---------------------- ------ ------------------- ------
3.99 N Y Y
Run Code Online (Sandbox Code Playgroud)
强制性链接:每个计算机科学家应该知道的浮点运算
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |