我正在将数据从 MySQL 数据库加载到 C# .NET 应用程序中。数据作为 DBType.Double 保存在数据库中,但为了在我的应用程序中使用,我使用 Convert.ToDecimal() 将其转换为十进制。该数据是测量中使用的位置数据,可用于在 Direct3D 窗口中显示 3D 模型。
当 Direct3D 窗口和 Direct3D dll 未加载时,转换工作正常,因此数据库中保存的 1769301.6485186936、5880300.8152837148 等值被加载为 1769301.64851869、5880300.81528371。但是,如果我已加载 Direct3D 模块,则转换会导致相同的值转换为 1769301.7112576、5880300.79401984。
基本代码如下,其中 vertex 是 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);
}
}
}