Tôi thường cần đặt sàn hoặc trần một số CGFloat
đến một số int
để tính chỉ mục mảng.Làm thế nào để an toàn sàn hoặc ceil một CGFloat để int?
Sự cố tôi thấy vĩnh viễn với floorf(theCGFloat)
hoặc ceilf(theCGFloat)
là có thể có vấn đề với điểm không chính xác.
Vì vậy, nếu CGFloat
của tôi là 2.0f
nhưng nội bộ nó được thể hiện là 1.999999999999f
hoặc thứ gì đó tương tự. Tôi làm floorf
và nhận được 1.0f
, đó là một phao một lần nữa. Tuy nhiên, tôi phải bỏ con thú này để int có thể giới thiệu một vấn đề khác.
Có một thực hành tốt nhất làm thế nào để sàn hoặc Ceil một float
một int
như một cái gì đó giống như 2.0
sẽ không bao giờ vô tình được làm mức sàn cho 1
và một cái gì đó giống như 2.0
sẽ không bao giờ vô tình được ceiled để 2
?
Câu hỏi này không thể trả lời một cách chính xác cho đến khi thông số kỹ thuật được cung cấp mô tả lỗi trong giá trị đầu vào và những gì hậu quả là các giá trị mà quá trở về cao hay quá thấp. Có sự cân bằng giữa trả về giá trị quá cao vì lỗi làm tròn trước đó làm cho giá trị quá cao và trả lại giá trị quá thấp vì giá trị được điều chỉnh giả tạo để bù cho lỗi trước đó và ngược lại. Không có giải thích về ngữ cảnh, không có câu trả lời đúng nào. –