作者:时尚妈咪达人都_354 | 来源:互联网 | 2023-09-01 13:30
开发区块链时,遇到以下问题,明明交易了5.005e+18数量的代币,结果最后只交易5个
查看以太坊浏览器,数据如下
苦思冥想,应该是数据转换出了问题
balance, _ := strconv.ParseFloat(num, 10)
balance=balance*1000000000000000000
amount.SetString(strconv.FormatFloat(balance,'g',-1,64), 10) // 1000 tokens
最后发现无论怎么相乘,结果都是只传值为5,猜想可能是科学计数法的问题,导致原来500500000000000,变成了5.005e+18,然后amount函数无法识别,导致错误,
于是处理科学计数法,引入"github.com/shopspring/decimal"
balance, _ := strconv.ParseFloat(num, 10)
balance=balance*1000000000000000000
balances:= decimal.NewFromFloat(balance)
amount.SetString(balances.String(),10)
结果成功解决问题,
查看以太坊数据,精度成功解决!