Làm thế nào để thực hiện một hoạt động mô-đun trong cảm ứng vật kính / ca cao?


82

Tôi có hai giá trị CGFloat và muốn tính toán kết quả mô đun. Hay nói cách khác: Tôi muốn biết những gì còn lại nếu valueA được đặt càng nhiều càng tốt vào valueB.

Vì vậy, tôi chỉ thử:

CGFloat moduloResult = valueB % valueA;

trình biên dịch phàn nàn về% và nói với tôi: "toán hạng không hợp lệ thành% nhị phân". Bất kỳ ý tưởng?

Câu trả lời:


204

% là cho inthoặc long, không floathoặcdouble .

Bạn có thể sử dụng fmod()hoặc fmodf()từ <math.h>thay thế.

Tốt hơn là <tgmath.h>theo gợi ý của nhà phát minh ra CGFloat .


2
tgmath.h có trên iPhone không? Tôi tự hỏi vì tôi chưa bao giờ phải bao gồm toán học.h. Tôi nghĩ nó đi kèm với khung nền tảng.

Ngoài ra, sự khác biệt giữa tgmath.h và math.h là gì?
user4951 19/11/12

4
Jim: tgmath.hlà "type generic" (do đó là "tg") và do đó sẽ quyết định math.hgọi hàm nào cho loại đầu vào của bạn. (Ví dụ: gọi floor(x)với tgmath.hbao gồm sẽ gọi (từ math.h) floorf(x)nếu xlà a float, floor(x)nếu xlà a doublehoặc floorl(x)nếu xlà a long double.)
George WS

10

Nếu tôi nhớ chính xác thì modulo yêu cầu 2 int làm đầu vào của nó, vì vậy bạn cần một cái gì đó như:

CGFloat moduloResult = (float)((int)valueB % (int)valueA);

Giả sử rằng valueB và valueA đều là float


3
Điều này, tất nhiên, sẽ không cung cấp cho bạn câu trả lời chính xác, vì làm tròn.
fishinear
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.