我正在读取avro文件并将读取的数据写入mysql。但我遇到了一个问题。当我使用这个存储库读取avro文件时,我读取的小数类型是
map[string]interface{}
。当我再往里面看时,有一个 big.Rat
类型。所以,我想知道如何将 big.Rat
转换为十进制而不损失精度。
读取avro文件的代码:
func readFile() {
f, err := os.Open("/my/avro/file.avro")
if err != nil {
log.Fatal(err)
}
defer f.Close()
dec, err := ocf.NewDecoder(f)
if err != nil {
log.Fatal(err)
}
for dec.HasNext() {
var record map[string]interface{}
err = dec.Decode(&record)
if err != nil {
log.Fatal(err)
}
}
}
我能用go想到的解决方案
func NewFromBigRat(value *big.Rat, precision int) decimal.Decimal {
flt := new(big.Float).SetRat(value)
dec, _ := decimal.NewFromString(flt.Text('f', precision))
return dec
}
我的解决方案正确吗?有没有更优雅的方法来解决这个问题?