第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

解組 yaml 時(shí)保持精度

解組 yaml 時(shí)保持精度

Go
吃雞游戲 2023-03-15 14:57:46
我得到了這段代碼:package mainimport ( "fmt" "gopkg.in/yaml.v2")func main() { kkk := "common:\n vartest1: 1.2000\n vartest2: 1.22233" tmp := map[string]interface{}{} yaml.Unmarshal([]byte(kkk), tmp) fmt.Println(tmp)}我期望的是 float 的精度與字符串保持一致。但我得到了這個(gè)輸出:map[common:map[vartest1:1.2 vartest2:1.22233]]我試過這個(gè):package mainimport ( "fmt" "gopkg.in/yaml.v2")type Myfloat64 float64func (e *Myfloat64) UnmarshalYAML(unmarshal func(interface{}) error) error { var test Myfloat64 err := unmarshal(&test) if err != nil {  return err } fmt.Println(test) *e = test return nil}func main() { kkk := "common:\n vartest1: 1.2000\n vartest2: 1.22233" tmp := map[string]interface{}{} yaml.Unmarshal([]byte(kkk), tmp) fmt.Println(tmp)}但是還UnmarshalYAML沒有被調(diào)用,因?yàn)?Myfloat64 類型不在map[string]interface{}{}. 我必須確保map[string]interface{}{}不變,因?yàn)槲也荒苡幸粋€(gè)固定的結(jié)構(gòu)來定義那個(gè)未編組的結(jié)構(gòu)。有什么辦法可以保持精度?輸入必須是“common:\n vartest1: 1.2000\n vartest2: 1.22233”。不允許將 1.2000 更新為字符串。
查看完整描述

1 回答

?
牛魔王的故事

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊

有什么辦法可以保持精度?

不要將字符串解析為浮點(diǎn)數(shù),而是保留原始值,即保留string.

這是一個(gè)例子:

  • 注意#1:需要擴(kuò)展代碼才能處理其他類型。

  • 注意#2:這是使用yaml.v3


type Any struct {

    Val any

}


func (a Any) String() string {

    return fmt.Sprint(a.Val)

}


func (a *Any) UnmarshalYAML(n *yaml.Node) error {

    switch n.Kind {

    case yaml.MappingNode:

        m := map[string]Any{}

        if err := n.Decode(&m); err != nil {

            return err

        }

        a.Val = m

    case yaml.ScalarNode:

        switch n.Tag {

        case "!!float":

            // Don't parse the raw string value,

            // use it as is if you want to retain

            // its formatting.

            a.Val = n.Value

        }

    }

    return nil

}

在操場(chǎng)上試試。


# output:

map[common:map[vartest1:1.2000 vartest2:1.22233]]


查看完整回答
反對(duì) 回復(fù) 2023-03-15
  • 1 回答
  • 0 關(guān)注
  • 102 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)