代码之家  ›  专栏  ›  技术社区  ›  Meep3D

在mysql中选择一个float

  •  22
  • Meep3D  · 技术社区  · 15 年前

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

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

    上面返回零行,而如果删除 price='101.31' 它返回正确的行。

    做…

    SELECT * FROM `table`;
    

    返回与上面相同的行,并清楚地声明 价格=101.31 . 然而,select无法匹配它。改变 = <= 使之起作用-但这并不是一个确切的解决方案。

    在对MySQL进行操作之前,是否有一种方法可以将其强制转换为2位数字,从而实现上述目的? 选择 工作(或其他解决方案)?

    谢谢!

    8 回复  |  直到 6 年前
        1
  •  38
  •   Matt Solnit    15 年前

    对我来说,小数的转换是有效的:

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

    但是,您可能会考虑将 price 第一列是小数。小数通常被认为是处理货币价值时使用的最佳类型。

        2
  •  11
  •   Eric Petroelje    15 年前

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

        3
  •  9
  •   jcdyer Anand S Kumar    15 年前

    千万不要用花车换钱。

        4
  •  7
  •   Blue    6 年前

    今天,我也遇到了同样的情况,只需要使用mysql的格式函数就可以解决这个问题,它将返回与where子句完全匹配的结果。

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

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

        5
  •  0
  •   Blue    6 年前

    我在搜索解决方案,但最后我使用了以前看到@hmasif解决方案的php number_format()。

    使用这个,你会得到你的float-mysql匹配:

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

    其中5是小数点后的五个字符串。例如7.93643

        6
  •  0
  •   Gerson Diniz    6 年前

    试试这个: 从中选择* 桌子 哪里 价格 喜欢 一百零一点三一 ;

        7
  •  -1
  •   LorenVS    15 年前

    也许是沿着这条线:

    SELECT * FROM table WHERE ident='ident23' AND ABS(price - 101.31) < .01;
    
        8
  •  -1
  •   Mark L    15 年前

    这行吗?

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