2 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
實(shí)際上,
int64((now - 1)/blockInterval * blockInterval
不會(huì)一直返回相同的結(jié)果。您會(huì)注意到它每 10 秒更改一次。
這是由 Go 中的整數(shù)除法引起的。如果對(duì)任意兩個(gè)數(shù)字應(yīng)用整數(shù)除法,則結(jié)果的小數(shù)部分(余數(shù))將被丟棄。例如,int(12 / 10) = 1
。在您的特定情況下 - 除以 10,代碼會(huì)將余數(shù)從 1 減到 9,并且只會(huì)在您到達(dá)下一個(gè) 10 時(shí)增加該值。
如果你想提高運(yùn)算的精度,那么你可以像這樣強(qiáng)制進(jìn)行浮點(diǎn)除法float64(12)/float64(10)
。

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊
你的問(wèn)題在這里:
result := int64((now-1)/blockInterval) * blockInterval
time.Now().Unix()以秒為單位返回當(dāng)前 Unix 時(shí)間。因此,對(duì)于連續(xù)迭代,time.Now().Unix()將是:
1257894001
1257894002
1257894003
但是在你的函數(shù)中,你減去 1,然后除以 10,所以上面的每一個(gè)都變成下面的,因?yàn)樾?shù)部分被去掉了。
125789400
125789400
125789400
然后當(dāng)你乘以blockInterval(10)時(shí),它們都變成:
1257894000
1257894000
1257894000
所以,result結(jié)果是一樣的。如果讓它運(yùn)行超過(guò) 10 秒,您會(huì)result在 10 秒后看到變化:
https://play.golang.org/p/LgPtHwjwlC1
- 2 回答
- 0 關(guān)注
- 174 瀏覽
添加回答
舉報(bào)