Jak wykonać operację modulo w Objective-C / Cocoa Touch?


82

Mam dwie wartości CGFloat i chcę obliczyć wynik modulo. Innymi słowy: chcę wiedzieć, co pozostanie, jeśli wartość A zostanie umieszczona jak najwięcej w valueB.

Więc właśnie spróbowałem:

CGFloat moduloResult = valueB % valueA;

kompilator narzeka na% i mówi mi: "nieprawidłowe operandy do binarnego%". Dowolny pomysł?

Odpowiedzi:


204

% jest dla intlub longnie floatlub double.

Zamiast tego możesz użyć fmod()lub fmodf()z <math.h>.

Lepiej jest, <tgmath.h>jak sugeruje wynalazca CGFloat .


2
czy tgmath.h jest dostępny na iPhone? Zastanawiam się, ponieważ nigdy nie musiałem uwzględniać matematyki. H. Myślę, że chodzi o ramy fundamentowe.

Jaka jest różnica między tgmath.h i math.h w ogóle?
user4951

4
Jim: tgmath.hjest „typem generycznym” (stąd „tg”) i dlatego zdecyduje, którą math.hfunkcję wywołać, biorąc pod uwagę typ wprowadzonych danych. (Na przykład wywołanie floor(x)z tgmath.hzawartością wywoła (from math.h) floorf(x)if xto a float, floor(x)if xis a double, or floorl(x)if xis a long double.)
George WS

10

Jeśli dobrze pamiętam, modulo wymaga 2 intów jako wejścia, więc potrzebujesz czegoś takiego:

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

Zakładając, że wartość B i wartość A są zmiennoprzecinkami


3
To oczywiście nie da poprawnej odpowiedzi ze względu na zaokrąglenia.
fishinear
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.