Golang更改浮点的xml封送处理格式

Golang更改浮点的xml封送处理格式,xml,go,format,marshalling,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)(并且省略空标记仍在工作)?您可以创建自己的编号类型,以您喜欢的方式封送: type prettyFloat f

当我封送
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)(并且
省略空标记仍在工作)?

您可以创建自己的编号类型,以您喜欢的方式封送:

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
}
操场:

编辑:
,省略空版本:

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
}

操场:。

谢谢!如何处理
ompitempty
xml标记?现在
0.00
被写入属性。(在问题中添加了编辑)好的,我明白了。目前在手机上,所以我还没有尝试过,但是像
0.0000000 12252
这样的浮点值不会弄糟吗?这取决于你所说的“弄糟”是什么意思。作为更接近go实现的选项:它使用strconv