2012-04-10 6 views
6

私は、MySQLデータベースからC#.NETアプリケーションにデータをロードしています。データはDBType.Doubleとしてデータベースに保持されますが、私のアプリケーションではConvert.ToDecimal()を使用してDecimalにキャストします。データは測量に使用される位置データであり、3DモデルをDirect3Dウィンドウに表示するために使用できます。Convert.ToDecimal DirectX/Direct3Dがロードされたときに異なる結果を出す

Direct3Dウィンドウ、したがってDirect3D dllがロードされていない場合、変換は正常に動作し、1769301.6485186936,5880300.8152837148などの値は1769301.64851869,5880300.81528371としてロードされます。しかし、Direct3Dモジュールを読み込んだ場合、変換結果は1769301.7112576、5880300.79401984に変換される同じ値になります。頂点が3進値、X、Yおよび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); 
    } 
    } 
} 
+0

Direct3Dが問題のスレッドの「NumberFormatInfo」を変更していると思います。設定方法については、[NumberFormatInfo](http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.aspx)を参照してください。 –

+0

@JoshuaDrake D3D9では、実際の浮動小数点値の変更(デフォルト)は書式設定だけでなく、実際には変更されています。私はこれが問題だと思う。 –

答えて

5

のクラス/構造体は、あなたのDirect3Dデバイスを作成する場合、あなたはD3DCREATE_FPU_PRESERVE in D3DCREATEを指定することです

基本的なコードは、以下のとおりです。これがなければ、DirectX(9)はスレッドを単精度浮動小数点演算を使用するように切り替えるため、マネージコードでも数値計算に影響します。

+0

これは問題を修正したようです。多くの感謝リード。 – jonew

関連する問題