Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Lua字符串转换为float_Lua_Redis - Fatal编程技术网

如何将Lua字符串转换为float

如何将Lua字符串转换为float,lua,redis,Lua,Redis,我正在编写一个简单的Lua脚本,用于从redis2.8中的排序集()计算中值。脚本如下 local cnt = redis.call("ZCARD", KEYS[1]) if cnt > 0 then if cnt%2 > 0 then local mid = math.floor(cnt/2) return redis.call("ZRANGE", KEYS[1], mid, mid)

我正在编写一个简单的Lua脚本,用于从redis2.8中的排序集()计算中值。脚本如下

local cnt = redis.call("ZCARD", KEYS[1])

if cnt > 0 then
        if cnt%2 > 0 then
                local mid = math.floor(cnt/2)
                return redis.call("ZRANGE", KEYS[1], mid, mid)
        else
                local mid = math.floor(cnt/2)
                local vals = redis.call("ZRANGE", KEYS[1], mid-1, mid)
                return (tonumber(vals[1]) + tonumber(vals[2]))/2.0
        end
else
        return nil
end
问题是脚本总是返回一个整数,而结果应该是浮点。结果是错误的

$ redis-cli zrange floats 0 100
1) "1.1"
2) "2.1"
3) "3.1"
4) "3.4975"
5) "42.63"
6) "4.1"

$ redis-cli EVAL "$(cat median.lua)" 1 floats
(integer) 3
正确的结果应该是(3.1+3.4975)/2.0==3.298

Lua只有一个数字类型,即Lua数字。整数和浮点数之间没有区别。因此,我们总是将Lua数字转换为整数回复,删除数字的小数部分(如果有的话)如果您想从Lua返回一个float,您应该将其作为字符串返回,就像Redis本身一样(例如,请参见ZSCORE命令)

因此,您应该更新脚本,以便返回:


对不起,我没有解释这一点,我遇到这个意外时,使脚本

function int2float(integer)
  return integer + 0.0
end

谢谢“所以我们总是将Lua数字转换为整数回复,去掉数字的小数部分”-这有什么原因吗,听起来完全违反直觉。我想整数比redis中的浮点更常见。
function int2float(integer)
  return integer + 0.0
end