Laden...

XML-Serialisierung von double-Werten

Erstellt von Thomas_HSU vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.591 Views
T
Thomas_HSU Themenstarter:in
3 Beiträge seit 2016
vor 7 Jahren
XML-Serialisierung von double-Werten

Hallo Community,

ich habe bei einem Projekt, bei dem double-Werte serialisiert werden müssen, folgendes Problem:

Der double-Wert 0.32708799854251003 wird als XML nicht richtig serialisiert. Die letzten drei Ziffern werden einfach abgeschnitten.
Das Problem zeigt auch die .ToString-Methode der Klasse Double (bzw. auch double).


[csharp]
double a = 0.32708799854251003;
Console.WriteLine(a.ToString());
[/csharp]
[code]
Ausgabe:
0,32708799854251
[/code]

Die exponentielle Schreibweise ist hingegen korrekt.


[csharp]
double a = 0.32708799854251003;
Console.WriteLine(a.ToString("E17"));
[/csharp]
[code]
Ausgabe:
3,27087998542510030E-001
[/code]

Gibt es eine Möglichkeit, dem XmlSerializer zu sagen, dass double-Werte in exponentieller schreibweise serialisiert werden sollen?

Gruß
Thomas

W
872 Beiträge seit 2005
vor 7 Jahren

Wenn es um Präzision geht, dann solltest Du decimal nehmen.

5.658 Beiträge seit 2006
vor 7 Jahren

Weeks of programming can save you hours of planning

T
Thomas_HSU Themenstarter:in
3 Beiträge seit 2016
vor 7 Jahren

@weismat:
Das Datenformat kann leider nicht geändert werden.

@MrSparcle:
Danke, den Hinweis und das Problem der Darstellung kenne ich. Im Debugger werden die Daten ja richtig angezeigt, nur bei der Darstellung und bei der Serialisierung nicht.

Deswegen auch die Frage:

Gibt es eine Möglichkeit, dem XmlSerializer zu sagen, dass double-Werte in exponentieller schreibweise serialisiert werden sollen?

Gruß
Thomas

16.834 Beiträge seit 2008
vor 7 Jahren

Einfach mal in die Doku schauen, dafür ist sie da.

Benutzerdefinierte Zahlenformatzeichenfolgen bzw Google (erster Treffer) C# How to force decimal precision in xml serialization

T
Thomas_HSU Themenstarter:in
3 Beiträge seit 2016
vor 7 Jahren

@ Abt:

M
19 Beiträge seit 2012
vor 7 Jahren

Ich würde den Round-Trip Format Specifier nutzen, beispielsweise so:


[XmlIgnore]
public double Value { get; set; }

[XmlElement("value ")]
public string ValueString {
get {return Value.ToString("r");}
set {Value= double.Parse(value);}
}