2 回答

TA贡献1784条经验 获得超8个赞
实际上,
int64((now - 1)/blockInterval * blockInterval
不会一直返回相同的结果。您会注意到它每 10 秒更改一次。
这是由 Go 中的整数除法引起的。如果对任意两个数字应用整数除法,则结果的小数部分(余数)将被丢弃。例如,int(12 / 10) = 1
。在您的特定情况下 - 除以 10,代码会将余数从 1 减到 9,并且只会在您到达下一个 10 时增加该值。
如果你想提高运算的精度,那么你可以像这样强制进行浮点除法float64(12)/float64(10)
。

TA贡献1851条经验 获得超5个赞
你的问题在这里:
result := int64((now-1)/blockInterval) * blockInterval
time.Now().Unix()以秒为单位返回当前 Unix 时间。因此,对于连续迭代,time.Now().Unix()将是:
1257894001
1257894002
1257894003
但是在你的函数中,你减去 1,然后除以 10,所以上面的每一个都变成下面的,因为小数部分被去掉了。
125789400
125789400
125789400
然后当你乘以blockInterval(10)时,它们都变成:
1257894000
1257894000
1257894000
所以,result结果是一样的。如果让它运行超过 10 秒,您会result在 10 秒后看到变化:
https://play.golang.org/p/LgPtHwjwlC1
- 2 回答
- 0 关注
- 131 浏览
添加回答
举报