Як зробити модульну операцію в об'єктиві-c / какао?


82

У мене є два значення CGFloat, і я хочу обчислити модульний результат. Або іншими словами: я хочу знати, що залишилось, якщо valueA розміщено якомога більше у valueB.

Тож я просто спробував:

CGFloat moduloResult = valueB % valueA;

компілятор скаржиться на% і каже мені: "недійсні операнди до двійкового%". Будь-яка ідея?

Відповіді:


204

% для intабо long, ні floatчи double.

Ви можете використовувати fmod()або fmodf()з <math.h>замість.

Краще, <tgmath.h>як запропонував винахідник CGFloat .


2
чи доступний tgmath.h на iphone? Цікаво, бо мені ніколи не доводилося включати math.h. Я думаю, це поставляється з основою фундаменту.

Також яка різниця між tgmath.h та math.h у будь-якому випадку?
user4951

4
Джим: tgmath.hє "загальним типом" (звідси "tg") і, отже, вирішить, яку math.hфункцію викликати, враховуючи тип вашого вводу. (Наприклад, дзвінок floor(x)з tgmath.hвключеним викличе (з math.h), floorf(x)якщо xє a float, floor(x)якщо xa doubleабо floorl(x)якщо xa long double.)
George WS

10

Якщо я правильно пам’ятаю, за модулем для введення потрібно 2 ints, тому вам знадобиться щось на зразок:

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

Якщо припустити, що valueB і valueA є обома числами


3
Це, звичайно, не дасть вам правильної відповіді через округлення.
fishinear
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.