Theo Matlab documentation, khi phương thức Java trả về long
, nó được chuyển thành double
trước khi được gán trong Matlab.MATLAB - Cách nhận int64 từ một phương thức Java trả về một thời gian dài?
Độ chính xác đã bị mất. Tôi quan tâm đến các chữ số dưới của số long
được trả về bằng phương thức Java. A double
không thể đại diện cho chúng, nhưng số int64
của Matlab có thể. (Điều này là rõ ràng bằng cách xem xét rằng cả hai loại có 64 bit, và một số double
sử dụng một số trong số chúng để đại diện cho số mũ.)
Nếu tôi có quyền kiểm soát mã Java, tôi có thể trả về một mảng với một phần tử, chứa long
- trong trường hợp này Matlab giữ chúng là int64
s, nhưng trong trường hợp của tôi, tôi gọi hàm thư viện.
Hiện tại, cách tốt nhất tôi có thể thấy là viết trình bao bọc trong Java sẽ gọi phương thức và trả về câu trả lời trong một mảng. Nhưng có những vấn đề về tính di động với phương pháp này. Có cách nào tốt hơn?
Yikes, thông tin tốt. Tôi có một dự án mà tôi đang đi qua xung quanh int64s qua lại, tôi sẽ cần phải quay trở lại và kiểm tra này! – JonB
Một suy nghĩ - nếu bạn trả về một java.lang.Long thay vì dài, bạn có thể (trong MATLAB) làm .toString() và mang lại kết quả như là một chuỗi, và chuyển đổi trở lại trong MATLAB. – JonB
tức là Matlab có thể lấy int64 bằng cách sử dụng sscanf (char (wrapperFun(). ToString), '% ld'). – JonB