Sphinx 斯芬克斯大数计算问题

Sphinx 斯芬克斯大数计算问题,sphinx,Sphinx,我已将mysql客户端与sphinx服务器连接 当我发出这个查询时 从[索引]限制1中选择20130919.0+(15/4),15/4 我得到以下结果 +------+--------+-------------------+----------+ | id | weight | 20130919.0+(15/4) | 15/4 | +------+--------+-------------------+----------+ | 7414 | 1 | 2013092

我已将mysql客户端与sphinx服务器连接 当我发出这个查询时

从[索引]限制1中选择20130919.0+(15/4),15/4
我得到以下结果

+------+--------+-------------------+----------+
| id   | weight | 20130919.0+(15/4) | 15/4     |
+------+--------+-------------------+----------+
| 7414 |      1 |   20130924.000000 | 3.750000 |
+------+--------+-------------------+----------+
请注意,
15/4
返回3.75,但将其添加到
20130919.0
时,返回错误的结果

在另一种情况下,当我编写以下查询时

从[INDEX]limit 1中选择2222+15/4,15/4

它返回正确的结果

+------+--------+-------------+----------+
| id   | weight | 2222+15/4   | 15/4     |
+------+--------+-------------+----------+
| 7414 |      1 | 2225.750000 | 3.750000 |
+------+--------+-------------+----------+
同样,在前一种情况下,第三列的值应为
20130922.75
。我认为问题在于斯芬克斯返回四舍五入的数字,但在这种情况下,它应该是
20130923.000
而不是
20130924.000


我想要的是,它应该返回一个正确的浮点数,但它的行为很奇怪。希望这里有人能对这种行为做出解释。

斯芬克斯主要做单精度浮点运算

它只使用8位作为指数。可以精确存储的十进制数字量约为7—您有8位

有一个double()函数,但我还没有测试它


编辑:实际上不,double()没有帮助

sphinxQL>select double(20130919.0)+(15/4),15/4  from sample2 limit 1;
+---------------------------+----------+
| double(20130919.0)+(15/4) | 15/4     |
+---------------------------+----------+
|           20130924.000000 | 3.750000 |
+---------------------------+----------+
1 row in set (0.03 sec)

sphinxQL>select double(20130919.0+(15/4)),15/4  from sample2 limit 1;
+---------------------------+----------+
| double(20130919.0+(15/4)) | 15/4     |
+---------------------------+----------+
|           20130924.000000 | 3.750000 |
+---------------------------+----------+
1 row in set (0.02 sec)

是的,你是对的。我在这里读过这篇文章,我知道双功能,但问题是我们使用的是Sphinx2.0.11,但它在2.2.1-beta版本中可用。这方面有什么解决办法吗?似乎浮动没有这样的解决办法。被单一感知所困扰。但也许你正在尝试做的任何事情都可以被重写以完全避免浮点数,我不知道。