2016-02-03 7 views
3

Когда я маршалу float64 в файл XML:Golang изменение 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 все еще работает)?

ответ

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.

EDIT:,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.

+0

Спасибо! Как я могу обработать тег 'omitempty' xml? Теперь '0,00' записывается в атрибут. (добавлено редактирование) – Kiril

+0

@Kiril См. править. –

+0

Хорошо, я вижу. В настоящее время по телефону, поэтому я еще не пробовал, но не поплавок, как '0,000000012252', испортит его? – Kiril

Смежные вопросы