如果连续的价格是38.03
,那么以下搜索限制都应该返回包含结果的行。
WHERE price >= '38.02' AND price <= '38.03'
(这有效)
WHERE price >= '20' AND price <= '100'
(这有效)
WHERE price >= '38.03' AND price <= '38.03'
(这不起作用)
WHERE price >= '38.03' AND price <= '100'
(这不起作用)
WHERE price >= '38.03'
(这不起作用)
WHERE price <= '38.03'
(这有效)
价格在DB中存储为浮动。
基本上,<=
正在运作,而>=
则不然。这有什么原因可以吗?
答案 0 :(得分:24)
请记住,float
在精确度方面是一种有缺陷的数据类型。如果您将12
表示为浮点数,则会获得11.99999999999998
或其他内容。
'38.03'
可以转换为十进制或其他更精确的数据类型(取决于RDBMS,我在这里是一般的),它将与浮点值不同。
float是32位,精度低。 Double工作得更好,是64位数据类型。某些系统中的十进制数据类型是128位数字数据类型,用于存储非常精确的数值,通常用于计价货币。
并且,跳过使用=
运算符比较float
值的习惯。浮点数用于近似和快速计算,只有与范围进行比较才能检查float
的值。这基本上对每个系统都有效。
答案 1 :(得分:0)
当您使用引号(')时,您的变量将被视为字符串。我认为这就是你的问题。
尝试:WHERE价格&gt; = 38.03 AND价格&lt; = 38.03