2012-04-10 24 views
6

Tôi đang tải dữ liệu từ cơ sở dữ liệu MySQL vào ứng dụng C# .NET. Dữ liệu được lưu giữ trong cơ sở dữ liệu dưới dạng DBType.Double, nhưng để sử dụng trong ứng dụng của tôi, tôi truyền đến Thập phân bằng cách sử dụng Convert.ToDecimal(). Dữ liệu là dữ liệu vị trí được sử dụng trong khảo sát và có thể được sử dụng để hiển thị một mô hình 3D trong cửa sổ Direct3D.Convert.ToDecimal đưa ra các kết quả khác nhau khi DirectX/Direct3D tải

Khi cửa sổ Direct3D, và do đó dll Direct3D không được tải, chuyển đổi hoạt động tốt, sao cho các giá trị như 1769301.6485186936, 5880300.8152837148 được giữ trong cơ sở dữ liệu được tải là 1769301.64851869, 5880300.81528371. Tuy nhiên, nếu tôi đã nạp mô-đun Direct3D thì kết quả chuyển đổi trong cùng một giá trị sẽ chuyển thành 1769301.7112576, 5880300.79401984.

Mã cơ bản là như dưới đây, nơi đỉnh là một lớp/struct của 3 giá trị thập phân, X, Y và 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

Tôi đoán Direct3D đang thay đổi 'NumberFormatInfo' cho chuỗi đang được đề cập đến. Xem [NumberFormatInfo] (http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.aspx) để biết thông tin về cài đặt nó. –

+0

@JoshuaDrake Có thực sự là một sự thay đổi trong các giá trị dấu chấm động thực (theo mặc định), không chỉ định dạng, với D3D9. Tôi nghi ngờ đây là vấn đề. –

Trả lời

5

Khi bạn tạo thiết bị Direct3D của bạn, bạn chỉ định D3DCREATE_FPU_PRESERVE in D3DCREATE. Nếu không có điều này, DirectX (9) sẽ chuyển đổi luồng để sử dụng các phép toán dấu chấm động chính xác đơn, điều này sẽ ảnh hưởng đến tính toán số ngay cả trong mã được quản lý của bạn.

+0

Điều đó dường như đã khắc phục được sự cố. Rất cám ơn Reed. – jonew

Các vấn đề liên quan