c# – Convert.ToDecimal在加载DirectX/Direct3D时给出不同的结果

我正在将数据从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);
    }
  }
}
最佳答案
创建Direct3D设备时,需要指定D3DCREATE_FPU_PRESERVE in D3DCREATE.如果没有这个,DirectX(9)将切换线程以使用单精度浮点运算,这将对数值计算产生影响,即使在托管代码中也是如此.

转载注明原文:c# – Convert.ToDecimal在加载DirectX/Direct3D时给出不同的结果 - 代码日志