本文摘自网络,作者,侵删。
构建以太坊普通交易结构的时候,有个 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的方法
本文来自:简书
感谢作者:斜杠青年_728f
查看原文:2021-03-18 golang 以太坊大额转账转换问题
相关阅读 >>
protoc Go插件编写之四 (实现生成自己的proto文件)
2021-03-12:Go中,如何确定有没有内存泄露,系统里怎么去监控整体的运行情况,日志是怎么处理
更多相关阅读请进入《Go》频道 >>

Go语言101
一个与时俱进的Go编程知识库。