2021-03-18 golang 以太坊大额转账转换问题

构建以太坊普通交易结构的时候,有个 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的方法  

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容