Objektif-c / kakao dokunuşunda modulo işlemi nasıl yapılır?


82

İki CGFloat değerim var ve modulo sonucunu hesaplamak istiyorum. Veya başka bir deyişle: değerA, değerB'ye mümkün olduğunca çok yerleştirilirse geriye ne kaldığını bilmek istiyorum.

Ben de denedim:

CGFloat moduloResult = valueB % valueA;

derleyici% 'den şikayet ediyor ve bana "ikili%' ye geçersiz işlenenler" diyor. Herhangi bir fikir?

Yanıtlar:


204

% için intveya longdeğil, floatveya değil double.

Bunun yerine fmod()veya fmodf()ile kullanabilirsiniz <math.h>.

CGFloat'ın mucidi tarafından önerildiği<tgmath.h> gibi daha iyidir .


2
tgmath.h iphone'da mevcut mu? Merak ediyorum çünkü hiçbir zaman math.h'yi dahil etmem gerekmedi Sanırım vakıf çerçevesi ile birlikte geliyor.

Ayrıca tgmath.h ile math.h arasındaki fark nedir?
user4951

4
Jim: tgmath.h"tür geneldir" (dolayısıyla "tg") ve bu nedenle, girdinizin math.htürüne göre hangi işlevi çağıracağınıza karar verecektir . (Örneğin, çağıran floor(x)ile tgmath.hbirlikte (dan arayacak math.h) floorf(x)eğer xbir olduğunu float, floor(x)eğer xbir olduğunu doubleveya floorl(x)olmadığını xbir olduğunu long double.)
George WS

10

Modulo'nun girdi olarak 2 inte ihtiyaç duyduğunu doğru hatırlıyorsam, şöyle bir şeye ihtiyacınız olacak:

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

DeğerB ve değerA'nın her ikisinin de yüzer olduğunu varsayarsak


3
Bu, elbette, yuvarlama nedeniyle size doğru cevabı vermeyecektir.
fishinear
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.