如何将math/big.Rat转换为十进制?

问题描述 投票:0回答:1

我正在读取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
}

我的解决方案正确吗?有没有更优雅的方法来解决这个问题?

go decimal avro
1个回答
0
投票

上个月添加了 shopspring/decimal

NewFromBigRat
https://github.com/shopspring/decimal/pull/288

© www.soinside.com 2019 - 2024. All rights reserved.