构建以太坊普通交易结构的时候,有个 value参数,类型为 *Int,
正常情况下直接 value := big.NewInt(100000000000000000000) 1ETH
当想转更多时,比如100eth,1000eth 就会报 int64溢出出错
正确的做法是 : 为方便入参,从上游接收一个string类型的value,
然后
valuef, err := strconv.ParseFloat(value,64) //先转换为 float64
if err != nil {
log.Println("is not a number")
}
// 再通过sprintf格式化为*Int
valueWei, isOk := new(big.Int).SetString(fmt.Sprintf("%.0f", valuef*1000000000000000000), 10)
if !isOk {
log.Println("float to bigInt failed!")
}
此时就不会溢出了,同样 *Int也有转换为string的方法
有疑问加站长微信联系(非本文作者)