Redis排序集错误得分

时间:2013-11-30 01:37:47

标签: redis

我们试试这个。

redis 127.0.0.1:6379> zadd aaa 999999999999991.1 one
(integer) 0
redis 127.0.0.1:6379> zscore aaa one
"999999999999991.12"
redis 127.0.0.1:6379> zadd aaa 999999999999991.2 one
(integer) 0
redis 127.0.0.1:6379> zscore aaa one
"999999999999991.25"

任何解决方案? 感谢。

1 个答案:

答案 0 :(得分:4)

您的redis使用的是IEEE 754 64位数字。

当您尝试在64位浮点寄存器中表示999999999999991.1时,最接近的十六进制表示为430c6bf52633ffb9。 完全十进制表示为999999999999991.125,您的redis-cli显示为999999999999991.12。

同样,当您输入999999999999991.2时,找到的最接近的位模式是430c6bf52633ffba,正好是999999999999991.25 - 您的redis-cli能够显示。

由于固定寄存器大小的这种精度损失几乎出现在每个系统中,Redis也不例外。