登录
首页 >  Golang >  Go问答

字符串转float64接收格式“.01”

来源:stackoverflow

时间:2024-04-08 18:42:34 338浏览 收藏

哈喽!今天心血来潮给大家带来了《字符串转float64接收格式“.01”》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

如果我从 API 收到一个遵循“.01”格式的字符串,并且我有一个如下所示的结构:

类型 Mystruct 结构 { val float64 json:"val,字符串" }

在这种情况下,我尝试将 val 解组为 float64。有什么办法可以实现这个目标吗?


正确答案


添加字符串字段以捕获字符串值:

type mystruct struct {
    val  float64 `json:"-"`
    xval string  `json:"val"`
}

解组 json 文档。将字符串值转换为浮点值:

var v mystruct
err := json.unmarshal([]byte(data), &v)
if err != nil {
    log.fatal(err)
}
v.val, err = strconv.parsefloat(v.xval, 64)
if err != nil {
    log.fatal(err)
}

我建议定义一个类型别名,您可以在任何地方使用它。

package main

import (
    "encoding/json"
    "fmt"
    "strconv"
    "strings"
)

type myfloat64 float64

func (f *myfloat64) unmarshaljson(data []byte) error {
    raw := string(data)
    raw = strings.trimprefix(raw, "\"")
    raw = strings.trimsuffix(raw, "\"")
    if parsedfloat, err := strconv.parsefloat(raw, 64); err != nil {
        return err
    } else {
        *f = myfloat64(parsedfloat)
        return nil
    }
}

type myobj struct {
    val1 myfloat64
    val2 string
}

func main() {
    j := `{"val1":"0.01", "val2":"0.01"}`
    o := myobj{}
    err := json.unmarshal([]byte(j), &o)
    if err != nil {
        fmt.println(err)
    } else {
        b, _ := json.marshal(o)
        fmt.println("in:", j)
        fmt.println("out:", string(b))
    }
}

输出:

in: {"Val1":"0.01", "Val2":"0.01"}
out: {"Val1":0.01,"Val2":"0.01"}

本篇关于《字符串转float64接收格式“.01”》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>