Redis 中 Lua 脚本的纳秒时间

我在 Redis 中运行了一个类似如下的 lua 脚本:

eval "return tostring(tonumber(ARGV[1]))" 0 1538409827183989630

本应该返回 1538409827183989630,但是却返回了 1.538409827184e+18,其中丢失了最后几个纳秒数字(这是一个纳秒级时间戳)

在需要与时间戳进行比较时,假设我需要纳秒级精度,应该怎么做呢?

点赞
用户2858170
用户2858170

Lua 数字有两个子类型,整数和浮点数,在 Lua 中会自动选择。

你需要关注这种差别的情况很少,甚至可能只有一种情况,就是当你想将一个数字转换为字符串时。

print(1538409827183989630) 将打印出 1538409827183989630

print(1538409827183989630.0) 打印为 1.538409827184e+18

如果你想确保得到相同的输出,你将需要显式地格式化字符串。

local int = 1538409827183989630
local float = 1538409827183989630.0

print(string.format("%d", int))
print(string.format("%d", float))

输出:

1538409827183989630
1538409827183989504

你会注意到,由于浮点数转换为整数,两个数字之间会有一个差别。

2020-12-30 12:43:25