在mysql中选择一个float

xuo3flqw  于 2021-06-20  发布在  Mysql
关注(0)|答案(8)|浏览(269)

我想做一个 SELECT 基于标识符和价格匹配表,例如:

SELECT * FROM `table` WHERE `ident`='ident23' AND `price`='101.31';

如果删除 price='101.31' 位返回正确的行。
正在做。。。

SELECT * FROM `table`;

返回与上面相同的行,并且非常清楚地说明 price='101.31' . 但是select无法匹配它。改变 =<= 使它工作-但这并不完全是一个解决方案。
有没有一种方法可以在对mysql float执行操作之前将其强制转换为2位数字,从而使 SELECT 工作(或其他解决方案)?
谢谢!

nhhxz33t

nhhxz33t1#

也许是这样的:

SELECT * FROM table WHERE ident='ident23' AND ABS(price - 101.31) < .01;
tuwxkamq

tuwxkamq2#

今天,我也遇到了同样的情况,只要使用mysql的format函数就可以解决,它会返回与where子句完全匹配的结果。

SELECT * FROM yourtable WHERE FORMAT(col,2) = FORMAT(value,2)

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

luaexgnf

luaexgnf3#

小数点对我来说很有用:

SELECT * FROM table WHERE CAST(price AS DECIMAL) = CAST(101.31 AS DECIMAL);

但是,您可能需要考虑 price 列的第一位是小数。十进制通常被认为是处理货币价值时最好使用的类型。

wljmcqd8

wljmcqd84#

它不起作用,因为浮点数本身就不精确。实际值可能类似于“101.3100000000001”,您可以先对其使用round()将其四舍五入到2位,或者最好使用十进制类型而不是浮点。

jecbmhm3

jecbmhm35#

我一直在寻找解决方案,但最后我还是用我以前的php number\u format()完成了,它是在@hmasif的解决方案中找到的。
使用此选项,您将获得float-mysql匹配:

$floatmatch = number_format((float)$yourfloatvariable,5);

其中5是小数点后的五个字符串。e、 g.7.93643美元

p5fdfcr1

p5fdfcr16#

试试这个:从pricelike101.31的表中选择*;

3hvapo4f

3hvapo4f7#

永远不要用花车赚钱。

23c0lvtd

23c0lvtd8#

这有用吗?

SELECT * , ROUND( price, 2 ) rounded
FROM table
WHERE ident = 'ident23'
HAVING rounded = 101.31

相关问题