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
Wenn es um Präzision geht, dann solltest Du decimal nehmen.
Siehe dazu auch folgenden Artikel: [FAQ] Double und Float: Fehler beim Vergleich und Rundungsfehler
Weeks of programming can save you hours of planning
@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
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
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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);}
}