在MySQL中选择一个浮点数

Mee*_*p3D 25 php mysql database floating-point

我试图SELECT根据标识符和价格在表格上进行匹配,例如:

SELECT * FROM `table` WHERE `ident`='ident23' AND `price`='101.31';
Run Code Online (Sandbox Code Playgroud)

以上返回零行,而如果删除该price='101.31'位则返回正确的行.

做......

SELECT * FROM `table`;
Run Code Online (Sandbox Code Playgroud)

返回与上面相同的行,并清楚地说明price='101.31'.然而,选择无法匹配它.改变=<=使得它的工作-而这是不完全的解决方案.

有没有办法在执行操作之前将MySQL float转换为2位数,从而完成上述SELECT工作(或其他一些解决方案)?

谢谢!

Mat*_*nit 42

投射到十进制为我工作:

SELECT * FROM table WHERE CAST(price AS DECIMAL) = CAST(101.31 AS DECIMAL);
Run Code Online (Sandbox Code Playgroud)

但是,您可能要考虑price首先将列设为DECIMAL.DECIMAL通常被认为是处理货币价值时使用的最佳类型.

  • 注意:使用`DECIMAL(M,D)`.`CAST(101.31 AS DECIMAL)= 101` (6认同)

Eri*_*lje 11

它不起作用,因为浮动本质上是不精确的.实际值可能类似于'101.3100000000001'您可以首先使用ROUND()将其舍入到2个位置,或者更好地使用DECIMAL类型而不是浮点数.


jcd*_*yer 9

不要用花车换钱.

  • 我从哪里获得客户的变更?(对不起,有点店主幽默:) (7认同)

小智 8

今天,我也遇到了同样的情况,只是通过使用MySQL的FORMAT函数得到解决,它将返回与WHERE子句完全匹配的结果.

SELECT * FROM yourtable WHERE FORMAT(col,2) = FORMAT(value,2)
Run Code Online (Sandbox Code Playgroud)

说明: FORMAT('col name', precision of floating point number)