gpt4 book ai didi

json - 避免科学记数法

转载 作者:行者123 更新时间:2023-12-01 22:29:58 25 4
gpt4 key购买 nike

我正在尝试使用 Go 与数据库交互并遇到
处理小数字段时的问题。

在这个数据库中,大多数基本上是整数字段的字段是
键入为精度为 0 的小数...例如:

  • 日期字段以 YYYYMMDD 格式存储为 decimal(8, 0)
  • ID 数字存储为十进制(9, 0)

  • 基本上任何 int 都存储为精度为 0 的小数。

    我正在尝试的是填充结构中的字段....
    type Record struct {
    ID uint
    CHANGE_DATE uint
    ...
    }

    但是当我从数据库中获取字段时,它们通常会以
    像这样的格式,但前提是数字足够长:2.0141208e+07

    我发现我可以扫描成浮点数,然后将浮点数转换为
    像这样的一个单位..
    mydate := float32(0)

    for rows.Next() {
    r := Record{}
    row.Scan(&.ID, &mydate)
    myrecord.Change_date = uint(mydate)
    }

    如果 ID 足够大,则 ParseInt 失败,我发现我必须
    如上所示进行浮点/整数转换。

    由于我需要处理许多字段(几乎所有数字),
    我想知道是否有更好的方法来进行这种类型转换?

    值得一提的是,这是来自打包 ERP 的数据库
    系统,因此更改表定义不是一个选项和原因
    我不只是让所有字段都在 Go 中 float ,我正在尝试输出 json
    我在 json 输出中得到了科学记数法。

    最佳答案

    从 RPC 服务器解析 JSON 时,我遇到了同样的问题。我创建了一个函数来将科学记数法字符串转换回 uint,如下所示:

    func scientificNotationToUInt(scientificNotation string) (uint, error) {
    flt, _, err := big.ParseFloat(scientificNotation, 10, 0, big.ToNearestEven)
    if err != nil {
    return 0, err
    }
    fltVal := fmt.Sprintf("%.0f", flt)
    intVal, err := strconv.ParseInt(fltVal, 10, 64)
    if err != nil {
    return 0, err
    }
    return uint(intVal), nil
    }
    Playground example

    关于json - 避免科学记数法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27512549/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com