Golang更改了float的xml marshal格式

时间:2016-02-03 17:25:46

标签: xml go format marshalling

当我将float64封送到xml文件时:

type X struct {
    Value float64 `xml:",attr,omitempty"`
}
var x X
x.Value = 1000000.04

我得到的价值如下:

<X Value="1.00000004e+06"></X>

如何更改输出格式,以便写入完整值(1000000.04)(且omitempty标记仍然有效)?

1 个答案:

答案 0 :(得分:6)

您可以创建自己的数字类型,以您喜欢的方式进行编组:

type prettyFloat float64

func (f prettyFloat) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
    s := fmt.Sprintf("%.2f", f)
    return xml.Attr{Name: name, Value: s}, nil
}

游乐场:http://play.golang.org/p/2moWdAwXrd

编辑: ,omitempty版本:

type prettyFloat float64

func (f prettyFloat) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
    if f == 0 {
        return xml.Attr{}, nil
    }
    s := fmt.Sprintf("%.2f", f)
    return xml.Attr{Name: name, Value: s}, nil
}

游乐场:http://play.golang.org/p/myBrjGGSJY