Tôi nhận thấy rằng khi tôi lưu trữ một giá trị kép, ví dụ: x = 0.56657011973046234
trong cơ sở dữ liệu sqlite và sau đó truy xuất nó sau, tôi nhận được y = 0.56657011973046201
. Theo số sqlite spec và số .NET spec (cả hai điều này tôi không đọc được đầu tiên :) điều này được mong đợi và bình thường.Làm thế nào tôi có thể 'cắt' một C# gấp đôi giá trị nó sẽ được lưu trữ như trong cơ sở dữ liệu sqlite?
Vấn đề của tôi là mặc dù độ chính xác cao không quan trọng, nhưng ứng dụng của tôi giao dịch với người dùng nhập/chọn đôi đại diện cho thông tin 3D cơ bản và sau đó chạy mô phỏng để tìm kết quả. Và đầu vào này có thể được lưu vào cơ sở dữ liệu sqlite để được tải lại và chạy lại sau.
Sự nhầm lẫn xảy ra do một loạt đầu vào mới được tạo sẽ rõ ràng mô phỏng theo cách hơi khác so với các đầu vào tương tự sau khi được lưu trữ và tải lại (vì các giá trị kép đã thay đổi). Điều này là hợp lý, nhưng không mong muốn.
Tôi chưa hoàn toàn biết cách xử lý vấn đề này, nhưng trong thời gian chờ đợi, tôi muốn giới hạn/kẹp đầu vào của người dùng vào các giá trị có thể được lưu trữ chính xác trong cơ sở dữ liệu sqlite. Vì vậy, nếu người dùng nhập 0.56657011973046234
, nó thực sự được chuyển đổi thành 0.56657011973046201
.
Tuy nhiên tôi đã không thể tìm ra, đưa ra một số, giá trị nào sẽ được lưu trữ trong cơ sở dữ liệu, ngắn thực sự lưu trữ và truy xuất nó từ cơ sở dữ liệu. Có cách nào để làm điều này không?
Bạn biết đấy, nếu máy tính siêu nhỏ Royal McBee đã làm điều này, Edward Lorenz sẽ không bao giờ phát hiện ra lý thuyết hỗn độn. :) –
@fostandy: Những giá trị thực tế đó (0.56657011973046234 và 0.56657011973046201) hay bạn đã tạo ra chúng? 0,56657011973046201 là 17 chữ số, do đó, nó nghĩa vụ phải vòng chuyến đi đến cùng một giá trị gấp đôi như 0.56657011973046234 (tôi đã kiểm tra trong C và nó không.) –
@Rick Regan - 0.56657011973046234 là một cái gì đó tôi thu được từ random.NextDouble(). 0,56657011973046201 là những gì tôi thu được khi tôi lưu trữ nó trong một trường số sqlite và lấy nó một lần nữa. Theo tôi hiểu nó (có giới hạn) 2 số cuối không được bảo đảm cho chuyến đi khứ hồi. – fostandy