Tôi gặp sự cố khi so sánh hai biến "Loại thực". Một là kết quả của phép toán, được lưu trữ trong tập dữ liệu, thứ hai là giá trị của trường chỉnh sửa trong biểu mẫu, được chuyển đổi bởi StrToFloat và được lưu vào biến "Real". Vấn đề là thế này: Delphi - so sánh hai biến số "Thực"
Như bạn có thể thấy, các chương trình đang cố gắng cho tôi biết, rằng 121,97 không bằng 121,97 ... Tôi đã đọc this topic, và tôi không chắc chắn copletely , đó là cùng một vấn đề. Nếu đúng như vậy, sẽ không phải cả hai số được lưu trữ trong các biến số giống như một số có thể biểu thị chính xác gần nhất, cho số 121.97 là 121.96999 99999 99998 86313 16227 83839 70260 62011 71875
?
Bây giờ, giả sử chúng không được lưu trữ dưới dạng số có thể đại diện gần nhất. Làm cách nào để tìm chính xác cách chúng được lưu trữ? Khi tôi nhìn vào cửa sổ gỡ lỗi "CPU", tôi hoàn toàn bị mất. Tôi thấy các địa chỉ, nơi mà những giá trị nên được, nhưng không có gì thậm chí tương tự như một số nhị phân, hệ thập lục phân hoặc bất cứ ... Điện thoại:
Sửa: hai giá trị đó thực sự hơi khác nhau.
OK, tôi không cần phải hiểu mọi thứ. Mặc dù tôi không giải quyết bằng tiền, sẽ có tối đa 3 chữ số thập phân, vì vậy "tiền tệ" là lối thoát
BTW: Việc tính toán là:
DATA[i].Meta.UnUsedAmount := DATA[i].AMOUNT - ObjQuery.FieldByName('USED').AsFloat;
Trong trường hợp này nó là 3695-3573,03
Xem JIRA RSP-13792. Bạn có thể muốn gọi hàm 'comparevalue'. – Magoo
@Magoo Báo cáo đó là không có thật. Trình biên dịch hoạt động chính xác. –
'StrToFloat' sẽ hoạt động như bạn nói.Nhưng còn giá trị khác thì sao? Nó được tính như thế nào. Tôi nghĩ bạn nên tập trung vào vấn đề thực tế mà chúng ta không thể thấy được. –