为了账号安全,请及时绑定邮箱和手机立即绑定

Big.Int Div 始终返回 0

Big.Int Div 始终返回 0

Go
有只小跳蛙 2022-09-19 10:11:30
我无法在 Go 中使用 BigInt.Div() 时获取值。大整数:    totalAllocPoint, _ := instance_polypup.TotalAllocPoint(&bind.CallOpts{}) //*big.int    fmt.Println("totalAllocPoint: ", totalAllocPoint)// 54000    poolInfoStruct, _ := instance_polypup.PoolInfo(&bind.CallOpts{}, &pid) //*big.int    fmt.Println("allocPoint: ", poolInfoStruct.AllocPoint)// 2000我试图使用以下代码进行划分,始终返回0:    poolInfoStruct.AllocPoint.Div(poolInfoStruct.AllocPoint, totalAllocPoint)    fmt.Println("poolAlloc: ", poolInfoStruct.AllocPoint)    poolAlloc := big.NewInt(0).Div(poolInfoStruct.AllocPoint, totalAllocPoint)    fmt.Println("poolAlloc: ", poolAlloc)    poolAlloc := big.NewInt(0)    poolAlloc.Div(poolInfoStruct.AllocPoint, totalAllocPoint)    fmt.Println("poolAlloc: ", poolAlloc)
查看完整描述

1 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

Int.Div() 是一个整数除法运算。你除以哪个是.这将永远是,因为除数大于股息。poolInfoStruct.AllocPointtotalAllocPoint2000 / 540000

也许你想要相反的?totalAllocPoint / poolInfoStruct.AllocPoint

请参阅此示例:

totalAllocPoint := big.NewInt(54000)
allocPoint := big.NewInt(2000)

totalAllocPoint.Div(totalAllocPoint, allocPoint)
fmt.Println(totalAllocPoint)

哪个输出(在Go游乐场上尝试)。27

您指出除数和股息是正确的。如果是这样,则不能用于此目的,因为只能表示整数。big.Intbig.Int

你可以使用大。例如,浮点数,并使用浮点数.Quo() 来计算商。

例如:

totalAllocPoint := big.NewInt(54000)
allocPoint := big.NewInt(2000)

tot := big.NewFloat(0).SetInt(totalAllocPoint)
ap := big.NewFloat(0).SetInt(allocPoint)

tot.Quo(ap, tot)
fmt.Println(tot)

输出(在Go游乐场上尝试):

0.037037037037037035

另一种选择是使用大。老鼠老鼠( )

tot := big.NewRat(0, 1).SetInt(totalAllocPoint)
ap := big.NewRat(0, 1).SetInt(allocPoint)

tot.Quo(ap, tot)
fmt.Println(tot)

输出(在Go游乐场上尝试):

1/27


查看完整回答
反对 回复 2022-09-19
  • 1 回答
  • 0 关注
  • 68 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信