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)
我找到了一种检查用户是否平等的方法。
我必须将字段转换为字符串并测试字符集,所以这对他们来说很好用:
select 'column1'
from 'some_table'
where CAST('some_float_field' AS CHAR) <=> '2.18'
Run Code Online (Sandbox Code Playgroud)