我正在将数据从MySQL数据库加载到C#.NET应用程序中。数据作为DBType.Double保存在数据库中,但是为了在我的应用程序中使用,我使用Convert.ToDecimal()强制转换为Decimal。数据是测量中使用的位置数据,可用于在Direct3D窗口中显示3D模型。
当未加载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 :(得分:5)
创建Direct3D设备时,您需要指定D3DCREATE_FPU_PRESERVE
in D3DCREATE
。如果没有这个,DirectX(9)将切换线程以使用单精度浮点运算,即使在托管代码中也会对数值计算产生影响。