大于或等于运算符的MySQL忽略了它或等于义务

bcm*_*cfc 9 mysql operators

如果连续的价格是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中.

所以基本上<=是工作而>=不是.这有什么原因可以吗?

Ale*_*rMP 24

请记住,float在精度方面,这是一种有缺陷的数据类型.如果你代表12浮动,你会得到11.99999999999998什么.

'38.03' 可以转换为十进制,或更精确的其他数据类型(取决于RDBMS,我在这里是一般的),它将不同于浮点值.

float是32位,精度低.Double工作得更好,是64位数据类型.某些系统中的十进制数据类型是128位数字数据类型,用于存储非常精确的数值,通常用于计价货币.

并且,跳过使用=运算符比较float值的习惯.浮点数用于近似和快速计算,只有与范围进行比较才能检查a的值float.这基本上对每个系统都有效.

  • +1是的,只需使用`DECIMAL`.MySQL非常适合这些. (2认同)