sum*_*232 0 lua redis jedis lettuce stackexchange.redis
127.0.0.1:7501> eval“返回{1,2,9223372036854775807}”0
1) (整数) 1
2) (整数) 2
3) (整数) -9223372036854775808
请帮助这种奇怪的行为。我知道 lua 只能通过损失一些精度来表示超过 10^15 的大数。我预计返回值为“9.2233720368548e+18”,但不是负数。
另请参考 127.0.0.1:7501> eval "return {1,2,tostring(9223372036854775807)}" 0
1) (整数) 1
2) (整数) 2
3) "9.2233720368548e+18"
127.0.0.1:7501> eval "return {1,2,tonumber(9223372036854775807)}" 0
1) (整数) 1
2) (整数) 2
3) (整数) -9223372036854775808
取自文档页面(https://redis.io/commands/eval):
Lua 有一个数字类型,Lua 数字。整数和浮点数之间没有区别。所以我们总是将 Lua 数字转换为整数回复,删除数字的小数部分(如果有)。如果你想从 Lua 返回一个浮点数,你应该将它作为字符串返回,就像 Redis 本身所做的那样(例如,参见 ZSCORE 命令)。
您使用的数字(~10^19)太大,无法在 Lua 中表示为整数,因此它变成了浮点数。当通过Redis类型转换将其转换为整数时,它会溢出并变成负值。
| 归档时间: |
|
| 查看次数: |
1695 次 |
| 最近记录: |