Ich lade Daten aus einer MySQL-Datenbank in eine C# .NET-Anwendung. Die Daten werden in der Datenbank als DBType.Double gespeichert, aber zur Verwendung in meiner Anwendung werde ich mit Convert.ToDecimal() in Decimal umgewandelt. Bei den Daten handelt es sich um Positionsdaten, die bei der Vermessung verwendet werden und zur Anzeige eines 3D-Modells in einem Direct3D-Fenster verwendet werden können.Convert.ToDecimal gibt unterschiedliche Ergebnisse, wenn DirectX/Direct3D geladen wurde
Wenn das Direct3D Fenster und damit der Direct3D-DLL nicht geladen wird, funktioniert die Umwandlung in Ordnung, so dass Werte wie 1.769.301,6485186936, 5.880.300,8152837148 in der Datenbank gehalten werden als 1.769.301,64851869 geladen, 5880300,81528371. Wenn ich jedoch das Direct3D-Modul geladen habe, werden bei der Konvertierung dieselben Werte in 1769301.7112576, 5880300.79401984 konvertiert.
Der Grundcode ist als unten, wo Vertex eine Klasse/Struktur von 3 Dezimalwerte, X, Y und Z.
List<vertex> positions = new List<vertex>();
using (MySqlCommand cmd = new MySqlCommand("SELECT x, y, z FROM positionTable;", conn))
{
MySqlDataReader dr = cmd.ExecuteReader();
try
{
while (dr.Read())
{
vertex position = new vertex();
position.X = Convert.ToDecimal(dr[0]);
position.Y = Convert.ToDecimal(dr[1]);
position.Z = Convert.ToDecimal(dr[2]);
positions.Add(position);
}
}
}
Ich würde vermuten, dass Direct3D die 'NumberFormatInfo' für den fraglichen Thread ändert. Informationen zur Einstellung finden Sie unter [NumberFormatInfo] (http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.aspx). –
@JoshuaDrake Es gibt tatsächlich eine Änderung der Gleitkommawerte (standardmäßig), nicht nur die Formatierung mit D3D9. Ich vermute, das ist das Problem. –