检查MySQL Float字段是否相等

Jos*_*eph 16 mysql floating-point

我有一个Joomla系统,我正在尝试更改搜索,以便它正确地在数据库中找到浮点值.

所以,我有一个在运行时构建的查询,如下所示:

select 'column1'
from 'some_table'
where 'some_float_field' <=> '2.18'
Run Code Online (Sandbox Code Playgroud)

这不起作用,它永远不会匹配任何东西,即使我在db中看到带有此值的记录.

所以我试着这样做:

select 'column1'
from 'some_table'
where 'some_float_field' <=> 2.18
Run Code Online (Sandbox Code Playgroud)

没有运气,所以然后我尝试转换为小数(浮动因某些原因不起作用),所以我尝试了这个:

select 'column1'
from 'some_table'
where 'some_float_field' <=> CAST('2.18' AS DECIMAL(20, 2))
Run Code Online (Sandbox Code Playgroud)

没有骰子...

请记住> =或<=返回正确的结果,只是<=>给我提出问题.

我如何在这里工作平等?

dcp*_*dcp 15

通常使用这些类型的问题,提供一个复制结果的小例子是很好的.

通常测试精确浮点值是一个坏主意,因为浮点精度不是一个精确的科学.使用一些公差要好得多.

create table foo1 (col1 float);

insert into foo1 values (2.18);
select * from foo1 where abs(col1-2.18) <= 1e-6
Run Code Online (Sandbox Code Playgroud)

  • 用户是否要求在表中使用float数据类型?通常,当用户想要精确的小数(例如钱)时,十进制数据类型是更好的选择.你将在未来几年内解决问题.想一想.如果它实际上是金钱,任何机会,不要浪费时间并重新设计十进制现在.相信我,我是根据这里的经验说的. (2认同)

Nee*_*raj 12

这是一个简单的方法来做到这一点

写就好了 where some_float_field LIKE 2.18

希望它会有所帮助;)


Jos*_*eph 5

我找到了一种检查用户是否平等的方法。

我必须将字段转换为字符串并测试字符集,所以这对他们来说很好用:

select 'column1'
from 'some_table'
where CAST('some_float_field' AS CHAR) <=> '2.18'
Run Code Online (Sandbox Code Playgroud)