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
添加回答
舉報