如何在Objective-C /可可粉触控中进行模运算?


82

我有两个CGFloat值,并想计算模结果。或者换句话说:我想知道如果将valueA尽可能多地放入valueB中还剩下什么。

所以我只是尝试:

CGFloat moduloResult = valueB % valueA;

编译器抱怨%,并告诉我:“二进制%的操作数无效”。任何的想法?

Answers:


204

%是forintlong,不是floator double

您可以改用fmod()fmodf()from <math.h>

更好的是<tgmath.h>作为由CGFloat的发明者建议


2
在iPhone上可以使用tgmath.h吗?我想知道,因为我从来不必包括math.h。我认为它带有基础框架。

还有tgmath.h和math.h之间有什么区别?
user4951 2012年

4
Jim:tgmath.h是“泛型类型”(因此称为“ tg”),因此将math.h根据给定的输入类型来决定调用哪个函数。(例如,floor(x)使用tgmath.hinclude进行呼叫会从(math.h)调用,floorf(x)如果xfloatfloor(x)如果xdoublefloorl(x)如果xlong double。)
George WS

10

如果我没记错的话,模数需要2个整数作为其输入,所以您将需要:

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

假设valueB和valueA都是浮点数


3
由于四舍五入,这当然不会给您正确的答案。
fishinear '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.